{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1d76e1cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "device(type='cpu')"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从io工具包导入open方法\n",
    "from io import open\n",
    "# 用于字符规范化\n",
    "import unicodedata\n",
    "# 用于正则表达式\n",
    "import re\n",
    "# 用于随机生成数据\n",
    "import random\n",
    "# 用于构建网络结构和函数的torch工具包\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "# torch中预定义的优化方法工具包\n",
    "from torch import optim\n",
    "import numpy as np  \n",
    "# 设备选择, 我们可以选择在cuda或者cpu上运行你的代码\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "import platform\n",
    "device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "95100e65",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 起始标志\n",
    "SOS_token = 0\n",
    "# 结束标志\n",
    "EOS_token = 1\n",
    "\n",
    "class Lang:\n",
    "    def __init__(self, name):\n",
    "        \"\"\"初始化函数中参数name代表传入某种语言的名字\"\"\"\n",
    "        # 将name传入类中\n",
    "        self.name = name\n",
    "        # 初始化词汇对应自然数值的字典\n",
    "        self.word2index = {}\n",
    "        # 初始化自然数值对应词汇的字典, 其中0，1对应的SOS和EOS已经在里面了\n",
    "        self.index2word = {0: \"SOS\", 1: \"EOS\"}\n",
    "        # 初始化词汇对应的自然数索引，这里从2开始，因为0，1已经被开始和结束标志占用了\n",
    "        self.n_words = 2  \n",
    "\n",
    "    def addSentence(self, sentence):\n",
    "        \"\"\"添加句子函数, 即将句子转化为对应的数值序列, 输入参数sentence是一条句子\"\"\"\n",
    "        # 根据一般国家的语言特性(我们这里研究的语言都是以空格分个单词)\n",
    "        # 对句子进行分割，得到对应的词汇列表\n",
    "        for word in sentence.split(' '):\n",
    "            # 然后调用addWord进行处理\n",
    "            self.addWord(word)\n",
    "\n",
    "\n",
    "    def addWord(self, word):\n",
    "        \"\"\"添加词汇函数, 即将词汇转化为对应的数值, 输入参数word是一个单词\"\"\"\n",
    "        # 首先判断word是否已经在self.word2index字典的key中\n",
    "        if word not in self.word2index:\n",
    "            # 如果不在, 则将这个词加入其中, 并为它对应一个数值，即self.n_words\n",
    "            self.word2index[word] = self.n_words\n",
    "            # 同时也将它的反转形式加入到self.index2word中\n",
    "            self.index2word[self.n_words] = word\n",
    "            # self.n_words一旦被占用之后，逐次加1, 变成新的self.n_words\n",
    "            self.n_words += 1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0799cfc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "word2index: {'hello': 2, 'I': 3, 'am': 4, 'Jay': 5}\n",
      "index2word: {0: 'SOS', 1: 'EOS', 2: 'hello', 3: 'I', 4: 'am', 5: 'Jay'}\n",
      "n_words: 6\n"
     ]
    }
   ],
   "source": [
    "name = \"eng\"\n",
    "sentence = \"hello I am Jay\"\n",
    "engl = Lang(name)\n",
    "engl.addSentence(sentence)\n",
    "print(\"word2index:\", engl.word2index)\n",
    "print(\"index2word:\", engl.index2word)\n",
    "print(\"n_words:\", engl.n_words)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f26d3392",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将unicode转为Ascii, 我们可以认为是去掉一些语言中的重音标记：Ślusàrski\n",
    "def unicodeToAscii(s):\n",
    "    return ''.join(\n",
    "        c for c in unicodedata.normalize('NFD', s)\n",
    "        if unicodedata.category(c) != 'Mn'\n",
    "    )\n",
    "\n",
    "\n",
    "def normalizeString(s):\n",
    "    \"\"\"字符串规范化函数, 参数s代表传入的字符串\"\"\"\n",
    "    # 使字符变为小写并去除两侧空白符, z再使用unicodeToAscii去掉重音标记\n",
    "    s = unicodeToAscii(s.lower().strip())\n",
    "    # 在.!?前加一个空格\n",
    "    s = re.sub(r\"([.!?])\", r\" \\1\", s)\n",
    "    # 使用正则表达式将字符串中不是大小写字母和正常标点的都替换成空格\n",
    "    s = re.sub(r\"[^a-zA-Z.!?]+\", r\" \", s)\n",
    "    return s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e7cd4cf8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "it s easy for monkeys to climb trees .\n"
     ]
    }
   ],
   "source": [
    "s = \"Hello!How are you I'm fine.\"\n",
    "s=\"It's easy for monkeys to climb trees.\"\n",
    "# s = \"Que prévoyez-vous de faire avec l'argent ?\"\n",
    "nsr = normalizeString(s)\n",
    "print(nsr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3170ed83",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"Hello!How are you ?I'm fine123!\""
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = \"Hello!How are you ?I'm fine.!\"\n",
    "s = re.sub(r\"([.?])([!])\", r\"123\\2\", s)  # \\1 表示第一个括号匹配的内容，\\2 表示第二个括号匹配的内容\n",
    "s\n",
    "\"Hello!How are you ?I'm fine123!\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f758dd9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[\"I had to get everyone's attention.\",\n",
       " \"Il me fallait capter l'attention de tout le monde.\"]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = \"I had to get everyone's attention.\tIl me fallait capter l'attention de tout le monde.\"\n",
    "d.split('\\t')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "841856b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "if platform.node()=='caofei':\n",
    "    data_path = r'C:\\Users\\caofei\\Desktop\\torch1\\案例\\英译法\\eng-fra.txt'\n",
    "\n",
    "def readLangs(lang1, lang2):\n",
    "    \"\"\"读取语言函数, 参数lang1是源语言的名字, 参数lang2是目标语言的名字\n",
    "       返回对应的class Lang对象, 以及语言对列表\"\"\"\n",
    "    # 从文件中读取语言对并以/n划分存到列表lines中\n",
    "    lines = open(data_path, encoding='utf-8').\\\n",
    "        read().strip().split('\\n')\n",
    "    # 对lines列表中的句子进行标准化处理，并以\\t进行再次划分, 形成子列表, 也就是语言对\n",
    "    pairs = [[normalizeString(s) for s in l.split('\\t')] for l in lines] \n",
    "    # 然后分别将语言名字传入Lang类中, 获得对应的语言对象, 返回结果\n",
    "    input_lang = Lang(lang1)\n",
    "    output_lang = Lang(lang2)\n",
    "    return input_lang, output_lang, pairs\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "79a47a2d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_lang: <__main__.Lang object at 0x0000022A497DE910>\n",
      "output_lang: <__main__.Lang object at 0x0000022A3C6BB3D0>\n",
      "pairs中的前五个: [['go .', 'va !'], ['run !', 'cours !'], ['run !', 'courez !'], ['wow !', 'ca alors !'], ['fire !', 'au feu !']]\n"
     ]
    }
   ],
   "source": [
    "lang1 = \"eng\"\n",
    "lang2 = \"fra\"\n",
    "input_lang, output_lang, pairs = readLangs(lang1, lang2)\n",
    "print(\"input_lang:\", input_lang)\n",
    "print(\"output_lang:\", output_lang)\n",
    "print(\"pairs中的前五个:\", pairs[:5])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1ea70c83",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pairs中的后五个: [['five tremors in excess of magnitude . on the richter scale have shaken japan just this week but scientists are warning that the largest expected aftershock has yet to hit .', 'cinq secousses depassant la magnitude cinq sur l echelle de richter ont secoue le japon precisement cette semaine mais les scientifiques avertissent que la plus grande replique est encore a venir .'], ['no matter how much you try to convince people that chocolate is vanilla it ll still be chocolate even though you may manage to convince yourself and a few others that it s vanilla .', 'peu importe le temps que tu passeras a essayer de convaincre les gens que le chocolat est de la vanille ca restera toujours du chocolat meme si tu reussis a convaincre toi et quelques autres que c est de la vanille .'], ['a child who is a native speaker usually knows many things about his or her language that a non native speaker who has been studying for years still does not know and perhaps will never know .', 'un enfant qui est un locuteur natif connait habituellement de nombreuses choses sur son langage qu un locuteur non natif qui a etudie pendant des annees ignore encore et peut etre ne saura jamais .'], ['there are four main causes of alcohol related death . injury from car accidents or violence is one . diseases like cirrhosis of the liver cancer heart and blood system diseases are the others .', 'il y a quatre causes principales de deces lies a l alcool . les blessures dans les accidents automobiles ou la violence en est une . les maladies comme la cirrhose le cancer les maladies cardio vasculaires en sont les autres .'], [' top down economics never works said obama . the country does not succeed when just those at the very top are doing well . we succeed when the middle class gets bigger when it feels greater security . ', ' l economie en partant du haut vers le bas ca ne marche jamais a dit obama . le pays ne reussit pas lorsque seulement ceux qui sont au sommet s en sortent bien . nous reussissons lorsque la classe moyenne s elargit lorsqu elle se sent davantage en securite . ']]\n"
     ]
    }
   ],
   "source": [
    "print(\"pairs中的后五个:\", pairs[-10:-5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f5275058",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置组成句子中单词或标点的最多个数\n",
    "MAX_LENGTH = 10\n",
    "\n",
    "# 选择带有指定前缀的语言特征数据作为训练数据\n",
    "eng_prefixes = (\n",
    "    \"i am \", \"i m \",\n",
    "    \"he is\", \"he s \",\n",
    "    \"she is\", \"she s \",\n",
    "    \"you are\", \"you re \",\n",
    "    \"we are\", \"we re \",\n",
    "    \"they are\", \"they re \"\n",
    ")\n",
    "\n",
    "\n",
    "def filterPair(p):\n",
    "    \"\"\"语言对过滤函数, 参数p代表输入的语言对, 如['she is afraid.', 'elle malade.']\"\"\"\n",
    "    # p[0]代表英语句子，对它进行划分，它的长度应小于最大长度MAX_LENGTH并且要以指定的前缀开头\n",
    "    # p[1]代表法文句子, 对它进行划分，它的长度应小于最大长度MAX_LENGTH\n",
    "    return len(p[0].split(' ')) < MAX_LENGTH and \\\n",
    "        p[0].startswith(eng_prefixes) and \\\n",
    "        len(p[1].split(' ')) < MAX_LENGTH \n",
    "\n",
    "\n",
    "def filterPairs(pairs):\n",
    "    \"\"\"对多个语言对列表进行过滤, 参数pairs代表语言对组成的列表, 简称语言对列表\"\"\"\n",
    "    # 函数中直接遍历列表中的每个语言对并调用filterPair即可\n",
    "    return [pair for pair in pairs if filterPair(pair)]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "da6e8322",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "过滤后的pairs前五个: [['i m .', 'j ai ans .'], ['i m ok .', 'je vais bien .'], ['i m ok .', 'ca va .'], ['i m fat .', 'je suis gras .'], ['i m fat .', 'je suis gros .']]\n"
     ]
    }
   ],
   "source": [
    "fpairs = filterPairs(pairs)\n",
    "print(\"过滤后的pairs前五个:\", fpairs[:5])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8690947c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['you re probably too young to understand this .',\n",
       "  'tu es probablement trop jeune pour le comprendre .'],\n",
       " ['i m thinking of learning korean next semester .',\n",
       "  'je pense apprendre le coreen le semestre prochain .'],\n",
       " ['she is always finding fault with other people .',\n",
       "  'elle trouve toujours a redire aux autres .'],\n",
       " ['she s very susceptible to hypnotic suggestion .',\n",
       "  'elle est tres receptive a la suggestion hypnotique .'],\n",
       " ['we re investigating the murder of tom jackson .',\n",
       "  'nous enquetons sur le meurtre de tom jackson .']]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fpairs[-10:-5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "21f92277",
   "metadata": {},
   "outputs": [],
   "source": [
    "def prepareData(lang1, lang2):\n",
    "    \"\"\"数据准备函数, 完成将所有字符串数据向数值型数据的映射以及过滤语言对\n",
    "       参数lang1, lang2分别代表源语言和目标语言的名字\"\"\"\n",
    "    # 首先通过readLangs函数获得input_lang, output_lang对象，以及字符串类型的语言对列表\n",
    "    input_lang, output_lang, pairs = readLangs(lang1, lang2)\n",
    "    # 对字符串类型的语言对列表进行过滤操作\n",
    "    pairs = filterPairs(pairs)\n",
    "    # 对过滤后的语言对列表进行遍历\n",
    "    for pair in pairs:\n",
    "        # 并使用input_lang和output_lang的addSentence方法对其进行数值映射\n",
    "        input_lang.addSentence(pair[0])\n",
    "        output_lang.addSentence(pair[1])\n",
    "    # 返回数值映射后的对象, 和过滤后语言对\n",
    "    return input_lang, output_lang, pairs\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f4fece88",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_n_words: 2803\n",
      "output_n_words: 4345\n",
      "['i m going to be gone soon .', 'je vais bientot etre parti .']\n"
     ]
    }
   ],
   "source": [
    "input_lang, output_lang, pairs = prepareData('eng', 'fra')\n",
    "print(\"input_n_words:\", input_lang.n_words)  # 英文  \n",
    "print(\"output_n_words:\", output_lang.n_words)  # 法文 \n",
    "print(random.choice(pairs))  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "491f40e7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import random\n",
    "random.choice([1,2,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "23fc3db6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'j': 2,\n",
       " 'ai': 3,\n",
       " 'ans': 4,\n",
       " '.': 5,\n",
       " 'je': 6,\n",
       " 'vais': 7,\n",
       " 'bien': 8,\n",
       " 'ca': 9,\n",
       " 'va': 10,\n",
       " 'suis': 11,\n",
       " 'gras': 12,\n",
       " 'gros': 13,\n",
       " 'en': 14,\n",
       " 'forme': 15,\n",
       " 'touche': 16,\n",
       " '!': 17,\n",
       " 'touchee': 18,\n",
       " 'malade': 19,\n",
       " 'triste': 20,\n",
       " 'timide': 21,\n",
       " 'mouille': 22,\n",
       " 'mouillee': 23,\n",
       " 'il': 24,\n",
       " 'est': 25,\n",
       " 'revenu': 26,\n",
       " 'me': 27,\n",
       " 'revoila': 28,\n",
       " 'chauve': 29,\n",
       " 'occupe': 30,\n",
       " 'occupee': 31,\n",
       " 'calme': 32,\n",
       " 'froid': 33,\n",
       " 'fini': 34,\n",
       " 'tout': 35,\n",
       " 'libre': 36,\n",
       " 'disponible': 37,\n",
       " 'repu': 38,\n",
       " 'rassasie': 39,\n",
       " 'content': 40,\n",
       " 'chez': 41,\n",
       " 'moi': 42,\n",
       " 'retard': 43,\n",
       " 'paresseux': 44,\n",
       " 'faineant': 45,\n",
       " 'paresseuse': 46,\n",
       " 'faineante': 47,\n",
       " 'porte': 48,\n",
       " 'securite': 49,\n",
       " 'certain': 50,\n",
       " 'sur': 51,\n",
       " 'sure': 52,\n",
       " 'grande': 53,\n",
       " 'mince': 54,\n",
       " 'ordonne': 55,\n",
       " 'ordonnee': 56,\n",
       " 'laid': 57,\n",
       " 'laide': 58,\n",
       " 'faible': 59,\n",
       " 'vieux': 60,\n",
       " 'dj': 61,\n",
       " 'bon': 62,\n",
       " 'riche': 63,\n",
       " 'ici': 64,\n",
       " 'flic': 65,\n",
       " 'un': 66,\n",
       " 'homme': 67,\n",
       " 'seule': 68,\n",
       " 'seul': 69,\n",
       " 'arme': 70,\n",
       " 'armee': 71,\n",
       " 'reveille': 72,\n",
       " 'aveugle': 73,\n",
       " 'fauche': 74,\n",
       " 'fou': 75,\n",
       " 'folle': 76,\n",
       " 'gueri': 77,\n",
       " 'guerie': 78,\n",
       " 'saoul': 79,\n",
       " 'soul': 80,\n",
       " 'ivre': 81,\n",
       " 'meurs': 82,\n",
       " 'avance': 83,\n",
       " 'premier': 84,\n",
       " 'difficile': 85,\n",
       " 'tatillon': 86,\n",
       " 'tatillonne': 87,\n",
       " 'pars': 88,\n",
       " 'maintenant': 89,\n",
       " 'tire': 90,\n",
       " 'y': 91,\n",
       " 'loyal': 92,\n",
       " 'loyale': 93,\n",
       " 'veinard': 94,\n",
       " 'veinarde': 95,\n",
       " 'du': 96,\n",
       " 'pot': 97,\n",
       " 'chanceux': 98,\n",
       " 'chanceuse': 99,\n",
       " 'train': 100,\n",
       " 'de': 101,\n",
       " 'mentir': 102,\n",
       " 'tranquille': 103,\n",
       " 'prete': 104,\n",
       " 'pret': 105,\n",
       " 'raison': 106,\n",
       " 'sobre': 107,\n",
       " 'excuse': 108,\n",
       " 'desole': 109,\n",
       " 'desolee': 110,\n",
       " 'coincee': 111,\n",
       " 'fatigue': 112,\n",
       " 'dur': 113,\n",
       " 'dure': 114,\n",
       " 'a': 115,\n",
       " 'cuire': 116,\n",
       " 'toi': 117,\n",
       " 'vous': 118,\n",
       " 'elle': 119,\n",
       " 'chaude': 120,\n",
       " 'tres': 121,\n",
       " 'attirante': 122,\n",
       " 'nous': 123,\n",
       " 'avons': 124,\n",
       " 'chaud': 125,\n",
       " 'sommes': 126,\n",
       " 'tristes': 127,\n",
       " 'timides': 128,\n",
       " 'faire': 129,\n",
       " 'gentil': 130,\n",
       " 'pauvre': 131,\n",
       " 'suisse': 132,\n",
       " 'helvete': 133,\n",
       " 'ruine': 134,\n",
       " 'intelligent': 135,\n",
       " 'humain': 136,\n",
       " 'creve': 137,\n",
       " 'francais': 138,\n",
       " 'coreen': 139,\n",
       " 'heros': 140,\n",
       " 'menteur': 141,\n",
       " 'cuis': 142,\n",
       " 'mieux': 143,\n",
       " 'paie': 144,\n",
       " 'c': 145,\n",
       " 'qui': 146,\n",
       " 'grassouillet': 147,\n",
       " 'grassouillette': 148,\n",
       " 'mange': 149,\n",
       " 'connu': 150,\n",
       " 'connue': 151,\n",
       " 'plus': 152,\n",
       " 'rapide': 153,\n",
       " 'flasque': 154,\n",
       " 'cupide': 155,\n",
       " 'gourmand': 156,\n",
       " 'gourmande': 157,\n",
       " 'cache': 158,\n",
       " 'honnete': 159,\n",
       " 'humble': 160,\n",
       " 'faim': 161,\n",
       " 'immunise': 162,\n",
       " 'immunisee': 163,\n",
       " 'au': 164,\n",
       " 'lit': 165,\n",
       " 'alite': 166,\n",
       " 'alitee': 167,\n",
       " 'rigole': 168,\n",
       " 'sens': 169,\n",
       " 'perdre': 170,\n",
       " 'demenager': 171,\n",
       " 'normal': 172,\n",
       " 'normale': 173,\n",
       " 'payer': 174,\n",
       " 'repose': 175,\n",
       " 'reposee': 176,\n",
       " 'ruinee': 177,\n",
       " 'remue': 178,\n",
       " 'remuee': 179,\n",
       " 'celibataire': 180,\n",
       " 'maigrichon': 181,\n",
       " 'maigrichonne': 182,\n",
       " 'sommeil': 183,\n",
       " 'sournois': 184,\n",
       " 'sournoise': 185,\n",
       " 'strict': 186,\n",
       " 'stricte': 187,\n",
       " 'fort': 188,\n",
       " 'forte': 189,\n",
       " 'trente': 190,\n",
       " 'affaiblie': 191,\n",
       " 'vieille': 192,\n",
       " 'gentille': 193,\n",
       " 'des': 194,\n",
       " 'hommes': 195,\n",
       " 'retour': 196,\n",
       " 'occupes': 197,\n",
       " 'occupees': 198,\n",
       " 'termine': 199,\n",
       " 'quittes': 200,\n",
       " 'allons': 201,\n",
       " 'la': 202,\n",
       " 'perdus': 203,\n",
       " 'perdues': 204,\n",
       " 'riches': 205,\n",
       " 'on': 206,\n",
       " 'foutu': 207,\n",
       " 'foutus': 208,\n",
       " 'faibles': 209,\n",
       " 'tu': 210,\n",
       " 'es': 211,\n",
       " 'vilain': 212,\n",
       " 'grand': 213,\n",
       " 'etes': 214,\n",
       " 'grands': 215,\n",
       " 'grandes': 216,\n",
       " 't': 217,\n",
       " 'marrante': 218,\n",
       " 'marrant': 219,\n",
       " 'vieilles': 220,\n",
       " 'huit': 221,\n",
       " 'hai': 222,\n",
       " 'mechant': 223,\n",
       " 'jeune': 224,\n",
       " 'beau': 225,\n",
       " 'mec': 226,\n",
       " 'gosse': 227,\n",
       " 'type': 228,\n",
       " 'binoclard': 229,\n",
       " 'flemmard': 230,\n",
       " 'endormi': 231,\n",
       " 'arrive': 232,\n",
       " 'd': 233,\n",
       " 'arriver': 234,\n",
       " 'pleurer': 235,\n",
       " 'simule': 236,\n",
       " 'blinde': 237,\n",
       " 'pete': 238,\n",
       " 'thune': 239,\n",
       " 'plein': 240,\n",
       " 'aux': 241,\n",
       " 'as': 242,\n",
       " 'mon': 243,\n",
       " 'age': 244,\n",
       " 'n': 245,\n",
       " 'pas': 246,\n",
       " 'lui': 247,\n",
       " 'l': 248,\n",
       " 'interieur': 249,\n",
       " 'cuisinier': 250,\n",
       " 'moine': 251,\n",
       " 'plaisante': 252,\n",
       " 'egalement': 253,\n",
       " 'dix': 254,\n",
       " 'sept': 255,\n",
       " 'finlandais': 256,\n",
       " 'finlandaise': 257,\n",
       " 'italien': 258,\n",
       " 'boulanger': 259,\n",
       " 'boulangere': 260,\n",
       " 'fait': 261,\n",
       " 'honte': 262,\n",
       " 'maison': 263,\n",
       " 'dans': 264,\n",
       " 'perplexe': 265,\n",
       " 'beni': 266,\n",
       " 'benie': 267,\n",
       " 'prudent': 268,\n",
       " 'prudente': 269,\n",
       " 'les': 270,\n",
       " 'foies': 271,\n",
       " 'chocottes': 272,\n",
       " 'curieux': 273,\n",
       " 'curieuse': 274,\n",
       " 'danser': 275,\n",
       " 'regime': 276,\n",
       " 'conduire': 277,\n",
       " 'conduis': 278,\n",
       " 'fiance': 279,\n",
       " 'fiancee': 280,\n",
       " 'excite': 281,\n",
       " 'excitee': 282,\n",
       " 'fais': 283,\n",
       " 'diete': 284,\n",
       " 'meticuleux': 285,\n",
       " 'meticuleuse': 286,\n",
       " 'affole': 287,\n",
       " 'affolee': 288,\n",
       " 'furieux': 289,\n",
       " 'bonne': 290,\n",
       " 'sante': 291,\n",
       " 'fredonne': 292,\n",
       " 'jalouse': 293,\n",
       " 'frousse': 294,\n",
       " 'marie': 295,\n",
       " 'mariee': 296,\n",
       " 'ne': 297,\n",
       " 'une': 298,\n",
       " 'idiote': 299,\n",
       " 'service': 300,\n",
       " 'patiente': 301,\n",
       " 'patient': 302,\n",
       " 'populaire': 303,\n",
       " 'remonte': 304,\n",
       " 'voyant': 305,\n",
       " 'voyante': 306,\n",
       " 'lis': 307,\n",
       " 'detendu': 308,\n",
       " 'detendue': 309,\n",
       " 'retraite': 310,\n",
       " 'retraitee': 311,\n",
       " 'pensionne': 312,\n",
       " 'pensionnee': 313,\n",
       " 'egoiste': 314,\n",
       " 'serieux': 315,\n",
       " 'choque': 316,\n",
       " 'choquee': 317,\n",
       " 'sincere': 318,\n",
       " 'bourre': 319,\n",
       " 'bourree': 320,\n",
       " 'tellement': 321,\n",
       " 'estomac': 322,\n",
       " 'talons': 323,\n",
       " 'dalle': 324,\n",
       " 'crocs': 325,\n",
       " 'reste': 326,\n",
       " 'gave': 327,\n",
       " 'gavee': 328,\n",
       " 'sidere': 329,\n",
       " 'sideree': 330,\n",
       " 'discuter': 331,\n",
       " 'taquine': 332,\n",
       " 'soif': 333,\n",
       " 'trop': 334,\n",
       " 'mecontent': 335,\n",
       " 'mecontente': 336,\n",
       " 'schcoumoune': 337,\n",
       " 'fortune': 338,\n",
       " 'fortunee': 339,\n",
       " 'gagne': 340,\n",
       " 'emporte': 341,\n",
       " 'travailler': 342,\n",
       " 'souci': 343,\n",
       " 'charme': 344,\n",
       " 'morte': 345,\n",
       " 'enfoiree': 346,\n",
       " 'renard': 347,\n",
       " 'ils': 348,\n",
       " 'sont': 349,\n",
       " 'mauvais': 350,\n",
       " 'elles': 351,\n",
       " 'mauvaises': 352,\n",
       " 'egalite': 353,\n",
       " 'seuls': 354,\n",
       " 'seules': 355,\n",
       " 'colere': 356,\n",
       " 'armes': 357,\n",
       " 'armees': 358,\n",
       " 'ennuyons': 359,\n",
       " 's': 360,\n",
       " 'emmerde': 361,\n",
       " 'fauches': 362,\n",
       " 'fauchees': 363,\n",
       " 'mourir': 364,\n",
       " 'heureux': 365,\n",
       " 'pretes': 366,\n",
       " 'sauves': 367,\n",
       " 'sauvees': 368,\n",
       " 'intelligents': 369,\n",
       " 'intelligentes': 370,\n",
       " 'desoles': 371,\n",
       " 'desolees': 372,\n",
       " 'coinces': 373,\n",
       " 'coincees': 374,\n",
       " 'fatigues': 375,\n",
       " 'fatiguees': 376,\n",
       " 'jumeaux': 377,\n",
       " 'jumelles': 378,\n",
       " 'sympa': 379,\n",
       " 'decontracte': 380,\n",
       " 'juste': 381,\n",
       " 'justes': 382,\n",
       " 'vas': 383,\n",
       " 'libres': 384,\n",
       " 'bons': 385,\n",
       " 'bonnes': 386,\n",
       " 'paresseuses': 387,\n",
       " 'perdu': 388,\n",
       " 'perdue': 389,\n",
       " 'sympas': 390,\n",
       " 'dingue': 391,\n",
       " 'dingues': 392,\n",
       " 'givre': 393,\n",
       " 'givree': 394,\n",
       " 'givres': 395,\n",
       " 'givrees': 396,\n",
       " 'grossier': 397,\n",
       " 'grossiers': 398,\n",
       " 'grossiere': 399,\n",
       " 'grossieres': 400,\n",
       " 'sauf': 401,\n",
       " 'saufs': 402,\n",
       " 'sauve': 403,\n",
       " 'minces': 404,\n",
       " 'poete': 405,\n",
       " 'excentrique': 406,\n",
       " 'manger': 407,\n",
       " 'heroique': 408,\n",
       " 'anglais': 409,\n",
       " 'bigot': 410,\n",
       " 'sectaire': 411,\n",
       " 'fanatique': 412,\n",
       " 'illumine': 413,\n",
       " 'souffre': 414,\n",
       " 'actuellement': 415,\n",
       " 'exterieur': 416,\n",
       " 'si': 417,\n",
       " 'mignon': 418,\n",
       " 'couard': 419,\n",
       " 'lache': 420,\n",
       " 'medecin': 421,\n",
       " 'toubib': 422,\n",
       " 'fermier': 423,\n",
       " 'agriculteur': 424,\n",
       " 'travaille': 425,\n",
       " 'ma': 426,\n",
       " 'ferme': 427,\n",
       " 'puriste': 428,\n",
       " 'drogue': 429,\n",
       " 'accro': 430,\n",
       " 'assuetude': 431,\n",
       " 'ouie': 432,\n",
       " 'adulte': 433,\n",
       " 'agent': 434,\n",
       " 'saigner': 435,\n",
       " 'melange': 436,\n",
       " 'pinceaux': 437,\n",
       " 'creatif': 438,\n",
       " 'creative': 439,\n",
       " 'cultive': 440,\n",
       " 'cultivee': 441,\n",
       " 'divorce': 442,\n",
       " 'divorcee': 443,\n",
       " 'noyer': 444,\n",
       " 'fidele': 445,\n",
       " 'affame': 446,\n",
       " 'intrepide': 447,\n",
       " 'bats': 448,\n",
       " 'gele': 449,\n",
       " 'cloue': 450,\n",
       " 'clouee': 451,\n",
       " 'credule': 452,\n",
       " 'le': 453,\n",
       " 'mal': 454,\n",
       " 'pays': 455,\n",
       " 'gueule': 456,\n",
       " 'bois': 457,\n",
       " 'paris': 458,\n",
       " 'innocent': 459,\n",
       " 'innocente': 460,\n",
       " 'ingenu': 461,\n",
       " 'ingenue': 462,\n",
       " 'implique': 463,\n",
       " 'impliquee': 464,\n",
       " 'm': 465,\n",
       " 'sors': 466,\n",
       " 'nouveau': 467,\n",
       " 'rebelle': 468,\n",
       " 'saint': 469,\n",
       " 'sainte': 470,\n",
       " 'sourd': 471,\n",
       " 'sourde': 472,\n",
       " 'abruti': 473,\n",
       " 'abrutie': 474,\n",
       " 'blesse': 475,\n",
       " 'blessee': 476,\n",
       " 'mechante': 477,\n",
       " 'certaine': 478,\n",
       " 'offense': 479,\n",
       " 'offensee': 480,\n",
       " 'indigne': 481,\n",
       " 'indignee': 482,\n",
       " 'puissant': 483,\n",
       " 'puissante': 484,\n",
       " 'preparee': 485,\n",
       " 'prepare': 486,\n",
       " 'ponctuel': 487,\n",
       " 'ponctuelle': 488,\n",
       " 'rationnel': 489,\n",
       " 'rationnelle': 490,\n",
       " 'amende': 491,\n",
       " 'amendee': 492,\n",
       " 'fiable': 493,\n",
       " 'tiens': 494,\n",
       " 'place': 495,\n",
       " 'impitoyable': 496,\n",
       " 'dormir': 497,\n",
       " 'las': 498,\n",
       " 'parler': 499,\n",
       " 'fringale': 500,\n",
       " 'tetu': 501,\n",
       " 'tetue': 502,\n",
       " 'obstine': 503,\n",
       " 'obstinee': 504,\n",
       " 'patron': 505,\n",
       " 'patronne': 506,\n",
       " 'reflechis': 507,\n",
       " 'minutieux': 508,\n",
       " 'minutieuse': 509,\n",
       " 'consciencieux': 510,\n",
       " 'consciencieuse': 511,\n",
       " 'ravi': 512,\n",
       " 'ravie': 513,\n",
       " 'chatouilleux': 514,\n",
       " 'chatouilleuse': 515,\n",
       " 'affaire': 516,\n",
       " 'affairee': 517,\n",
       " 'dis': 518,\n",
       " 'verite': 519,\n",
       " 'impartial': 520,\n",
       " 'impartiale': 521,\n",
       " 'dessus': 522,\n",
       " 'epuise': 523,\n",
       " 'chancarde': 524,\n",
       " 'tranchante': 525,\n",
       " 'affutee': 526,\n",
       " 'tort': 527,\n",
       " 'ce': 528,\n",
       " 'garcons': 529,\n",
       " 'froids': 530,\n",
       " 'froides': 531,\n",
       " 'flics': 532,\n",
       " 'mignons': 533,\n",
       " 'mignonnes': 534,\n",
       " 'decedes': 535,\n",
       " 'decedees': 536,\n",
       " 'ont': 537,\n",
       " 'partis': 538,\n",
       " 'parties': 539,\n",
       " 'miens': 540,\n",
       " 'miennes': 541,\n",
       " 'arabes': 542,\n",
       " 'equipe': 543,\n",
       " 'adultes': 544,\n",
       " 'tous': 545,\n",
       " 'guerre': 546,\n",
       " 'notre': 547,\n",
       " 'point': 548,\n",
       " 'vue': 549,\n",
       " 'biaise': 550,\n",
       " 'prejuges': 551,\n",
       " 'achetons': 552,\n",
       " 'fermes': 553,\n",
       " 'venons': 554,\n",
       " 'sortons': 555,\n",
       " 'ensemble': 556,\n",
       " 'condamnes': 557,\n",
       " 'cachons': 558,\n",
       " 'plaisantons': 559,\n",
       " 'perdons': 560,\n",
       " 'bouger': 561,\n",
       " 'normaux': 562,\n",
       " 'normales': 563,\n",
       " 'creves': 564,\n",
       " 'crevees': 565,\n",
       " 'ruines': 566,\n",
       " 'ruinees': 567,\n",
       " 'remues': 568,\n",
       " 'remuees': 569,\n",
       " 'sournoises': 570,\n",
       " 'forts': 571,\n",
       " 'fortes': 572,\n",
       " 'essayons': 573,\n",
       " 'joues': 574,\n",
       " 'chef': 575,\n",
       " 'cruelle': 576,\n",
       " 'cruel': 577,\n",
       " 'cruelles': 578,\n",
       " 'cruels': 579,\n",
       " 'viens': 580,\n",
       " 'tot': 581,\n",
       " 'matinal': 582,\n",
       " 'matinale': 583,\n",
       " 'vire': 584,\n",
       " 'licencie': 585,\n",
       " 'passes': 586,\n",
       " 'marrants': 587,\n",
       " 'marrantes': 588,\n",
       " 'manieres': 589,\n",
       " 'faites': 590,\n",
       " 'malpoli': 591,\n",
       " 'mens': 592,\n",
       " 'mentez': 593,\n",
       " 'lunatique': 594,\n",
       " 'naif': 595,\n",
       " 'naive': 596,\n",
       " 'naifs': 597,\n",
       " 'naives': 598,\n",
       " 'idiot': 599,\n",
       " 'idiots': 600,\n",
       " 'idiotes': 601,\n",
       " 'plante': 602,\n",
       " 'plantee': 603,\n",
       " 'plantes': 604,\n",
       " 'plantees': 605,\n",
       " 'durs': 606,\n",
       " 'dures': 607,\n",
       " 'contrariee': 608,\n",
       " 'contrarie': 609,\n",
       " 'bizarre': 610,\n",
       " 'bizarres': 611,\n",
       " 'erreur': 612,\n",
       " 'jeunes': 613,\n",
       " 'britannique': 614,\n",
       " 'voleur': 615,\n",
       " 'genre': 616,\n",
       " 'sorti': 617,\n",
       " 'lire': 618,\n",
       " 'court': 619,\n",
       " 'patin': 620,\n",
       " 'patine': 621,\n",
       " 'rouspeteur': 622,\n",
       " 'jesuite': 623,\n",
       " 'aine': 624,\n",
       " 'ancien': 625,\n",
       " 'magnat': 626,\n",
       " 'adorable': 627,\n",
       " 'derriere': 628,\n",
       " 'apres': 629,\n",
       " 'mes': 630,\n",
       " 'fesses': 631,\n",
       " 'poursuit': 632,\n",
       " 'embetant': 633,\n",
       " 'tokyo': 634,\n",
       " 'peu': 635,\n",
       " 'manque': 636,\n",
       " 'confiance': 637,\n",
       " 'sans': 638,\n",
       " 'pitie': 639,\n",
       " 'etudie': 640,\n",
       " 'etudier': 641,\n",
       " 'lent': 642,\n",
       " 'ton': 643,\n",
       " 'fils': 644,\n",
       " 'votre': 645,\n",
       " 'americain': 646,\n",
       " 'americaine': 647,\n",
       " 'japonais': 648,\n",
       " 'musulman': 649,\n",
       " 'musulmane': 650,\n",
       " 'coureur': 651,\n",
       " 'diabetique': 652,\n",
       " 'etudiant': 653,\n",
       " 'professeur': 654,\n",
       " 'enseignante': 655,\n",
       " 'adapte': 656,\n",
       " 'peur': 657,\n",
       " 'toute': 658,\n",
       " 'ambitieuse': 659,\n",
       " 'ambitieux': 660,\n",
       " 'artiste': 661,\n",
       " 'orphelin': 662,\n",
       " 'attentive': 663,\n",
       " 'attentif': 664,\n",
       " 'belle': 665,\n",
       " 'preoccupe': 666,\n",
       " 'preoccupee': 667,\n",
       " 'voila': 668,\n",
       " 'satisfait': 669,\n",
       " 'satisfaite': 670,\n",
       " 'convaincu': 671,\n",
       " 'deprime': 672,\n",
       " 'desespere': 673,\n",
       " 'desesperee': 674,\n",
       " 'differente': 675,\n",
       " 'degoute': 676,\n",
       " 'degoutee': 677,\n",
       " 'facile': 678,\n",
       " 'vivre': 679,\n",
       " 'epuisee': 680,\n",
       " 'vanne': 681,\n",
       " 'vannee': 682,\n",
       " 'fourbu': 683,\n",
       " 'crevee': 684,\n",
       " 'distrait': 685,\n",
       " 'distraite': 686,\n",
       " 'etourdi': 687,\n",
       " 'etourdie': 688,\n",
       " 'tom': 689,\n",
       " 'ur': 690,\n",
       " 'impatient': 691,\n",
       " 'impatiente': 692,\n",
       " 'important': 693,\n",
       " 'impressionnee': 694,\n",
       " 'impulsif': 695,\n",
       " 'impulsive': 696,\n",
       " 'boston': 697,\n",
       " 'danger': 698,\n",
       " 'intrigue': 699,\n",
       " 'intriguee': 700,\n",
       " 'cela': 701,\n",
       " 'ecoute': 702,\n",
       " 'motivee': 703,\n",
       " 'motive': 704,\n",
       " 'expert': 705,\n",
       " 'partie': 706,\n",
       " 'ses': 707,\n",
       " 'admirateurs': 708,\n",
       " 'leurs': 709,\n",
       " 'rends': 710,\n",
       " 'heureuse': 711,\n",
       " 'contente': 712,\n",
       " 'obese': 713,\n",
       " 'petite': 714,\n",
       " 'fatiguee': 715,\n",
       " 'observateur': 716,\n",
       " 'observatrice': 717,\n",
       " 'respectueux': 718,\n",
       " 'respectueuse': 719,\n",
       " 'chemin': 720,\n",
       " 'route': 721,\n",
       " 'desarme': 722,\n",
       " 'desarmee': 723,\n",
       " 'realiste': 724,\n",
       " 'eprouve': 725,\n",
       " 'ressentiment': 726,\n",
       " 'endurant': 727,\n",
       " 'endurante': 728,\n",
       " 'tenace': 729,\n",
       " 'non': 730,\n",
       " 'sensible': 731,\n",
       " 'surpris': 732,\n",
       " 'surprise': 733,\n",
       " 'survis': 734,\n",
       " 'terrifie': 735,\n",
       " 'terrifiee': 736,\n",
       " 'assure': 737,\n",
       " 'assuree': 738,\n",
       " 'vote': 739,\n",
       " 'tombe': 740,\n",
       " 'francaise': 741,\n",
       " 'jumelle': 742,\n",
       " 'active': 743,\n",
       " 'pleure': 744,\n",
       " 'beaute': 745,\n",
       " 'mannequin': 746,\n",
       " 'super': 747,\n",
       " 'asiatiques': 748,\n",
       " 'vie': 749,\n",
       " 'eveilles': 750,\n",
       " 'eveillees': 751,\n",
       " 'courageux': 752,\n",
       " 'courageuses': 753,\n",
       " 'yeux': 754,\n",
       " 'propres': 755,\n",
       " 'fous': 756,\n",
       " 'folles': 757,\n",
       " 'saouls': 758,\n",
       " 'saoules': 759,\n",
       " 'heureuses': 760,\n",
       " 'mentent': 761,\n",
       " 'petits': 762,\n",
       " 'petites': 763,\n",
       " 'espions': 764,\n",
       " 'espionnes': 765,\n",
       " 'formons': 766,\n",
       " 'groupe': 767,\n",
       " 'anxieux': 768,\n",
       " 'perplexes': 769,\n",
       " 'prudents': 770,\n",
       " 'prudentes': 771,\n",
       " 'certains': 772,\n",
       " 'certaines': 773,\n",
       " 'cousines': 774,\n",
       " 'fiances': 775,\n",
       " 'faisons': 776,\n",
       " 'amis': 777,\n",
       " 'amies': 778,\n",
       " 'aimons': 779,\n",
       " 'amoureux': 780,\n",
       " 'amoureuses': 781,\n",
       " 'veinards': 782,\n",
       " 'veinardes': 783,\n",
       " 'souffrons': 784,\n",
       " 'synchronises': 785,\n",
       " 'synchronisees': 786,\n",
       " 'ville': 787,\n",
       " 'jalouses': 788,\n",
       " 'maries': 789,\n",
       " 'detendus': 790,\n",
       " 'detendues': 791,\n",
       " 'serieuses': 792,\n",
       " 'choques': 793,\n",
       " 'choquees': 794,\n",
       " 'sinceres': 795,\n",
       " 'coulons': 796,\n",
       " 'couler': 797,\n",
       " 'bourres': 798,\n",
       " 'bourrees': 799,\n",
       " 'speciaux': 800,\n",
       " 'arret': 801,\n",
       " 'affames': 802,\n",
       " 'affamees': 803,\n",
       " 'restons': 804,\n",
       " 'gaves': 805,\n",
       " 'gavees': 806,\n",
       " 'sideres': 807,\n",
       " 'siderees': 808,\n",
       " 'touches': 809,\n",
       " 'touchees': 810,\n",
       " 'pieges': 811,\n",
       " 'piegees': 812,\n",
       " 'satisfaits': 813,\n",
       " 'satisfaites': 814,\n",
       " 'malchanceux': 815,\n",
       " 'malchanceuses': 816,\n",
       " 'inutiles': 817,\n",
       " 'attendre': 818,\n",
       " 'gagneurs': 819,\n",
       " 'gagner': 820,\n",
       " 'malin': 821,\n",
       " 'avez': 822,\n",
       " 'amour': 823,\n",
       " 'menteuse': 824,\n",
       " 'snob': 825,\n",
       " 'partiale': 826,\n",
       " 'partial': 827,\n",
       " 'ennuyez': 828,\n",
       " 'ennuies': 829,\n",
       " 'brillant': 830,\n",
       " 'brillante': 831,\n",
       " 'brillants': 832,\n",
       " 'brillantes': 833,\n",
       " 'maline': 834,\n",
       " 'malins': 835,\n",
       " 'malines': 836,\n",
       " 'ruse': 837,\n",
       " 'rusee': 838,\n",
       " 'ruses': 839,\n",
       " 'rusees': 840,\n",
       " 'astucieux': 841,\n",
       " 'astucieuse': 842,\n",
       " 'sinistre': 843,\n",
       " 'sinistres': 844,\n",
       " 'connus': 845,\n",
       " 'connues': 846,\n",
       " 'avide': 847,\n",
       " 'avides': 848,\n",
       " 'bougon': 849,\n",
       " 'bougonne': 850,\n",
       " 'grognon': 851,\n",
       " 'plaisantes': 852,\n",
       " 'plaisantez': 853,\n",
       " 'fric': 854,\n",
       " 'pleine': 855,\n",
       " 'drole': 856,\n",
       " 'jolie': 857,\n",
       " 'maigrichonnes': 858,\n",
       " 'maigrichons': 859,\n",
       " 'endormie': 860,\n",
       " 'endormis': 861,\n",
       " 'endormies': 862,\n",
       " 'injuste': 863,\n",
       " 'canadien': 864,\n",
       " 'genie': 865,\n",
       " 'ecrivain': 866,\n",
       " 'acteur': 867,\n",
       " 'faillite': 868,\n",
       " 'oncle': 869,\n",
       " 'ouvert': 870,\n",
       " 'sociable': 871,\n",
       " 'extraverti': 872,\n",
       " 'quelque': 873,\n",
       " 'joueur': 874,\n",
       " 'desormais': 875,\n",
       " 'planque': 876,\n",
       " 'auteur': 877,\n",
       " 'detenu': 878,\n",
       " 'hors': 879,\n",
       " 'loi': 880,\n",
       " 'harcele': 881,\n",
       " 'se': 882,\n",
       " 'trouve': 883,\n",
       " 'prison': 884,\n",
       " 'ami': 885,\n",
       " 'rend': 886,\n",
       " 'hongrois': 887,\n",
       " 'garcon': 888,\n",
       " 'touriste': 889,\n",
       " 'londres': 890,\n",
       " 'petrin': 891,\n",
       " 'endroit': 892,\n",
       " 'conge': 893,\n",
       " 'aujourd': 894,\n",
       " 'hui': 895,\n",
       " 'petit': 896,\n",
       " 'musicien': 897,\n",
       " 'musicienne': 898,\n",
       " 'quelqu': 899,\n",
       " 'vrai': 900,\n",
       " 'vendeur': 901,\n",
       " 'que': 902,\n",
       " 'crains': 903,\n",
       " 'contre': 904,\n",
       " 'maladroit': 905,\n",
       " 'vieil': 906,\n",
       " 'stupefait': 907,\n",
       " 'stupefaite': 908,\n",
       " 'utilise': 909,\n",
       " 'contagieux': 910,\n",
       " 'contagieuse': 911,\n",
       " 'mort': 912,\n",
       " 'deshydrate': 913,\n",
       " 'deshydratee': 914,\n",
       " 'peut': 915,\n",
       " 'compter': 916,\n",
       " 'aneanti': 917,\n",
       " 'aneantie': 918,\n",
       " 'bas': 919,\n",
       " 'entrainer': 920,\n",
       " 'vois': 921,\n",
       " 'loin': 922,\n",
       " 'fascine': 923,\n",
       " 'fascinee': 924,\n",
       " 'te': 925,\n",
       " 'kyoto': 926,\n",
       " 'retourne': 927,\n",
       " 'deviens': 928,\n",
       " 'aussi': 929,\n",
       " 'amuse': 930,\n",
       " 'analphabete': 931,\n",
       " 'voiture': 932,\n",
       " 'interesse': 933,\n",
       " 'interessee': 934,\n",
       " 'seulement': 935,\n",
       " 'simplement': 936,\n",
       " 'the': 937,\n",
       " 'mediter': 938,\n",
       " 'methodique': 939,\n",
       " 'baisse': 940,\n",
       " 'facilement': 941,\n",
       " 'bras': 942,\n",
       " 'abandonne': 943,\n",
       " 'amer': 944,\n",
       " 'amere': 945,\n",
       " 'grincheux': 946,\n",
       " 'grincheuse': 947,\n",
       " 'coupable': 948,\n",
       " 'blague': 949,\n",
       " 'raciste': 950,\n",
       " 'suffisamment': 951,\n",
       " 'vacances': 952,\n",
       " 'conges': 953,\n",
       " 'entre': 954,\n",
       " 'optimiste': 955,\n",
       " 'essence': 956,\n",
       " 'vraiment': 957,\n",
       " 'raisonnable': 958,\n",
       " 'reamenager': 959,\n",
       " 'quelle': 960,\n",
       " 'poisse': 961,\n",
       " 'toujours': 962,\n",
       " 'encore': 963,\n",
       " 'succes': 964,\n",
       " 'tueur': 965,\n",
       " 'deshabille': 966,\n",
       " 'devets': 967,\n",
       " 'chomage': 968,\n",
       " 'talent': 969,\n",
       " 'depourvu': 970,\n",
       " 'depourvue': 971,\n",
       " 'habitue': 972,\n",
       " 'accoutume': 973,\n",
       " 'habituee': 974,\n",
       " 'vegetarienne': 975,\n",
       " 'eveille': 976,\n",
       " 'eveillee': 977,\n",
       " 'infirmiere': 978,\n",
       " 'maladroite': 979,\n",
       " 'exprimer': 980,\n",
       " 'fille': 981,\n",
       " 'bombe': 982,\n",
       " 'canon': 983,\n",
       " 'ange': 984,\n",
       " 'enceinte': 985,\n",
       " 'attend': 986,\n",
       " 'evenement': 987,\n",
       " 'famille': 988,\n",
       " 'bruyante': 989,\n",
       " 'parle': 990,\n",
       " 'ennuient': 991,\n",
       " 'bebes': 992,\n",
       " 'ennuyeux': 993,\n",
       " 'ennuyeuses': 994,\n",
       " 'arrivent': 995,\n",
       " 'prets': 996,\n",
       " 'toutes': 997,\n",
       " 'couple': 998,\n",
       " 'completement': 999,\n",
       " 'freres': 1000,\n",
       " 'divorces': 1001,\n",
       " ...}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "output_lang.word2index \n",
    "# input_lang.index2word"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a7d53147",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['i m having some problems compiling this software .',\n",
       "  'j ai quelques difficultes a compiler ce programme .'],\n",
       " ['they are collecting contributions for the church .',\n",
       "  'ils collectent des dons pour l eglise .'],\n",
       " ['he is one of the american presidential candidates .',\n",
       "  'il est un des candidats aux presidentielles americaines .']]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pairs[-3:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "971b933c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1],\n",
       "       [2],\n",
       "       [3]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# reshape\n",
    "np.array([1,2,3]).reshape(-1,1)  # 1行3列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "42e8ca5a",
   "metadata": {},
   "outputs": [],
   "source": [
    "def tensorFromSentence(lang, sentence):\n",
    "    \"\"\"将文本句子转换为张量, 参数lang代表传入的Lang的实例化对象, sentence是预转换的句子\"\"\"\n",
    "    # 对句子进行分割并遍历每一个词汇, 然后使用lang的word2index方法找到它对应的索引\n",
    "    # 这样就得到了该句子对应的数值列表\n",
    "    indexes = [lang.word2index[word] for word in sentence.split(' ')]\n",
    "    # 然后加入句子结束标志\n",
    "    indexes.append(EOS_token)\n",
    "    # 将其使用torch.tensor封装成张量, 并改变它的形状为nx1, 以方便后续计算\n",
    "    return torch.tensor(indexes, dtype=torch.long, device=device).view(-1, 1)\n",
    "\n",
    "\n",
    "def tensorsFromPair(pair):\n",
    "    # 输入 ['i m .', 'j ai ans .']\n",
    "    \"\"\"将语言对转换为张量对, 参数pair为一个语言对\"\"\"\n",
    "    # 调用tensorFromSentence分别将源语言和目标语言分别处理，获得对应的张量表示\n",
    "    input_tensor = tensorFromSentence(input_lang, pair[0])\n",
    "    target_tensor = tensorFromSentence(output_lang, pair[1])\n",
    "    # 最后返回它们组成的元组\n",
    "    return (input_tensor, target_tensor)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "e789ac7c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['i m .', 'j ai ans .'],\n",
       " ['i m ok .', 'je vais bien .'],\n",
       " ['i m ok .', 'ca va .'],\n",
       " ['i m fat .', 'je suis gras .'],\n",
       " ['i m fat .', 'je suis gros .']]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pairs[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "76f0d71e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['i m .', 'j ai ans .']"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 取pairs的第一条\n",
    "pair = pairs[0]\n",
    "pair"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b3499dc6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[2],\n",
       "         [3],\n",
       "         [4],\n",
       "         [1]]),\n",
       " tensor([[2],\n",
       "         [3],\n",
       "         [4],\n",
       "         [5],\n",
       "         [1]]))"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ['i m .', 'j ai ans .']    转换成  词向量\n",
    "pair_tensor = tensorsFromPair(pair)\n",
    "pair_tensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7660eb07",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[  14],\n",
       "         [  40],\n",
       "         [ 517],\n",
       "         [ 518],\n",
       "         [ 294],\n",
       "         [ 352],\n",
       "         [2801],\n",
       "         [2802],\n",
       "         [   4],\n",
       "         [   1]]),\n",
       " tensor([[  24],\n",
       "         [  25],\n",
       "         [  66],\n",
       "         [ 194],\n",
       "         [4342],\n",
       "         [ 241],\n",
       "         [4343],\n",
       "         [4344],\n",
       "         [   5],\n",
       "         [   1]]))"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pair = pairs[-1]\n",
    "\n",
    "pair_tensor = tensorsFromPair(pair)\n",
    "pair_tensor\n",
    "\n",
    "\n",
    "# 每句话转换成 一个二维的词向量  （1,10）  10是句子的长度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "3f5a5f4d",
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'mess'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[26], line 4\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;66;03m# 'eng', 'fra'\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \n\u001b[0;32m      3\u001b[0m \u001b[38;5;66;03m# input_lang.word2index['.']\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m \u001b[43moutput_lang\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mword2index\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmess\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n",
      "\u001b[1;31mKeyError\u001b[0m: 'mess'"
     ]
    }
   ],
   "source": [
    "# 'eng', 'fra'\n",
    "\n",
    "# input_lang.word2index['.']\n",
    "output_lang.word2index['mess']\n",
    "\n"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+MAAAGzCAIAAADL91FZAAAgAElEQVR4AeydB3gU1drHP9I2laIg0iwICNjAq5TQAqhYsKMoFvReQe9Vru1elZLQQbF7xauCV8CK1JCEIl1AanpPSEJI79k29ZzZj5mTTDabQILZxF3yn+d9NrOzZ86c83tnN//zzjtn/s+GBQRAAARAAARAAARAAARAwPUI/J/rNQktAgEQAAEQAAEQAAEQAAEQsEGp4yQAARAAARAAARAAARAAAVckAKXuil5Bm0AABEAABEAABEAABEAASh3nAAiAAAiAAAiAAAiAAAi4IgEodVf0CtoEAiAAAiAAAiAAAiAAAlDqOAdAAARAAARAAARAAARAwBUJQKm7olfQJhAAARAAARAAARAAARCAUsc5AAIgAAIgAAIgAAIgAAKuSABK3RW9gjaBAAiAAAiAAAiAAAiAAJQ6zgEQAAEQAAEQAAEQAAEQcEUCUOqu6BW0CQRAAARAAARAAARAAASg1HEOgAAIgAAIgAAIgAAIgIArEoBSd0WvoE0gAAIgAAIgAAIgAAIgAKWOcwAEQAAEQAAEQAAEQAAEXJEAlLoregVtAgEQAAEQAAEQAAEQAAEodZwDIAACIAACIAACIAACIOCKBKDUXdEraBMIgAAIgAAIgAAIgAAIQKnjHAABEAABEAABEAABEAABVyQApe6KXkGbQAAEQAAEQAAEQAAEQABKHecACIAACIAACIAACIAACLgiASh1V/QK2gQCIAACIAACIAACIAACUOo4B0AABEAABEAABEAABEDAFQlAqbuiV9AmEAABEAABEAABEAABEIBSxzkAAiAAAiAAAiAAAiAAAq5IAErdFb2CNoEACIAACIAACIAACIAAlDrOARAAARAAARAAARAAARBwRQJQ6q7oFbQJBEAABEAABEAABEAABKDUcQ6AAAiAAAiAAAiAAAiAgCsSgFJ3Ra+gTSAAAiAAAiAAAiAAAiAApY5zAARAAARAAARAAARAAARckQCUuit6BW0CARAAARAAARAAARAAASh1nAMgAAIgAAIgAAIgAAIg4IoEoNRb6pXCn6aHLDtmV8uxxSHT1+drG/LXTw9ZbP+ZXbHzrl6owvPuVPdBY7uHLD5SVwBrIAACIAACIAACIAACbkHgklXqqmDVl3pK2sl+aUwZn0+pH1usN6n+yuIjtmPLQqb/VGiz2eoqPNJYcbUvDeqx62Dd7lpHHd46ufOoDgRAAARAAARAAARAoNUIXJpKXZWnemCb6Vo7LetcmLoU1g5aX4Dbv9MbYBdo19W5zdaYUmcNbaS8XdjeXtlr5fX2qO/UfRtdascSzmWB2kAABEAABEAABEAABJxH4JJU6oXrn6+JT9eAUoPTraVN6ylj9Xh2MtpOZNe5zG5js5T6kcUhz69Xg+11at7uEHZK/diy+qJ82XpHDjWNqLd7XcOwBgIgAAIgAAIgAAIg4EoEXEip2wtNlgdSC8ou2aNWs9Z8VBcznr4+Xy3WeEK2WkxX6qqO15d65etqC6mfeq4GvGuWZcdUaa41o24j+6wmam6ng+1EeU1aS201jn+fX7++YfaL1snG1LzdIeyUOmOitkprid0Qoj4ZOxp6X2pR4y8IgAAIgAAIgAAIgICrEHAVpa7qS12Fa4q5VkNrMr02dUQTx7X3aGrFajS9th5yHqWu6tGaOzs1mV5bm80+1m5fm00rVtse+4Nq63ZNZSVrKqw3BqinxfUj2mzqQe1q1sckuiK3U9ha4bp7UtX6NSx2Q5d6gwQW0dc22R3RUY6rPa1l6CrnIdoBAiAAAiAAAiAAAiDgSKC1lHp2dvasWbNCQkJmzZqVnZ3teFjH9/UFtN2ndiKbbVVFKlO39cQ9U8CNK3V7rV+3u91B1FXH2jThrspifaVmh3oiviYR3E6p68pbr7+e8taUvV5GV+d64Xp3lNYdulaa10j888fUjyye/rw6F41dzeq+tcMe7ThQ6va4sQ4CIAACIAACIAACrkqgtZQ6k+ks4Dtr1qwmu68pcjUmXn9Ow0YUvCqpVWWsfqRLXrX+Ol1rfzStBrtqGwTFWeGGCr62fjXuXq9V9pq+8KfpqjJWl8XHWHyd9dnhtTbC7TDwsNPTdW3Wlf2FP63boW6tcP2y9cdqZo08tliT9Wptz68vtFfn9ut1+2INBEAABEAABEAABEDAtQi0llJ3UKrN6rT9pIQ1wWOmsx0qY0q9obZuEDyukc71dLZjvniNhlb3bbhM/6nQQVvX7F4X2168ninj/PXTn1+82GHwoHVbV97aWEJPl2+ARBtpsDbUC4HXL1hXW/3trGE1Da4dGNjf3lq3I5R6A3TYAAIgAAIgAAIgAAIuSKC1lPrFxtTroWGSvTZw7nBzZ23J2ph37fsGMXXHaLpeUF/RVDgLzDfU/bWlzh9TVwPqTMrXKOPzjCtCHO9Pra1a/dto4JwVYM1rOH5ofIua8aKOSeoUOUvpqafatc5Cqds7AOsgAAIgAAIgAAIg4KoEWkupX2SeuiMeVW5qcWv7VBOtUJ1Ad/xI0/e10eimZTo7pFpJ40OC2gi9FuqurVaNXKtTx9S0zVEZ13XD7rbRuo21KTqNS227rXaHs9+7cP3z0xcvmx7y/PTpNUF9+09r1u2UeqMXChYfO1/bGqkMm0AABEAABEAABEAABP40Aq2l1C+yQ5r8bRj9VWvR5GbtR1qYWc9msQ+E16hSpnFV/V0/uby2Pfa71E9t1xS5nvhuPwywP6i2bj/3ix7DZmMDO7ntsFrbhdqW1Py9QEzdvqR2XDVzRl1ZduwCiTQ1Bex3dliHUncAgrcgAAIgAAIgAAIg4JIEXESp18aqdXVbT9fWqHDtQ12mM5x1Hy3+SX0ep6rUNc2t16Sv1Aaq63YJqZ1GpsY19jvWD1rXCPQQVaOvt59Qsn62Sa2L1UMsXrZY1/212xv526RS10YddffO2glxNjZwTHy3K9DI4WpmuanFqxau39PG98FWEAABEAABEAABEACBNifgOkq9xV13TFNpcYXnqcA+3F5zg2mt8K3RwbVPWdL0fZ2SZppbHzk0saLNtNhwhvgGQrw2ll/bhgYF1G7UP7TDaOc8/cRmEAABEAABEAABEACBP5UAlPpF429cqdfG42sj93q1jkpa/+CPrTQqxP9YVdgLBEAABEAABEAABEDAlQlAqV+0dxyU+kXvjx1AAARAAARAAARAAARAoBkELiGl3ozeoggIgAAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACIAACIAACIBA+yIApd6+/I3eggAIgAAIgAAIgAAIuAsBKHV38RTaCQIgAAIgAAIgAAIg0L4IQKm3L3+jtyAAAiAAAiAAAiAAAu5CAErdXTyFdoIACIAACIAACIAACLQvAlDq7cvf6C0IgAAIgAAIgAAIgIC7EIBSdxdPoZ0gAAIgAAIgAAIgAALtiwCUevvyN3oLAiAAAiAAAiAAAiDgLgSg1N3FU2gnCIAACLQpAUVR9OPZr+sbsdLaBFqOXbFbHFpr90mdox3KuPtbB4AObx16x4DoGx3e6tuxAgJtTABKvY2B43AgAAIg4AYEKKUmk6m6utpoNMraQgiBdmkzz1FKJW0hhFBtIYRIkiTLcpNtoJQyl/E8X15eXlZWJgiCJElEW5gTZVkWBIHXFrPZXFlZaTKZRFGUZZlS2uQh/vQCiqJIkiQIAqWU9Uh/ZbgURZFlWRRFxo3BZG/17TpMQohYuzBKkiRxHCdJ0oXF/Z/OAQ1oDwSg1NuDl9FHEAABELg4ArIsf/311wMHDpw0aVJeXh7TeVDqFwexBaVlWd60adNnn3326aeffqYta9eujY6O5jiuSe2oq/wDBw5cf/31AwYMyM7O5jjObDZ/9913n2rLhx9++OWXX/I8z3Hca6+9NmjQoKefflrXvi1oeBvtKsuyxWIRtIWpcP1VlmU2vBFFkQluq9Wampp64MCB6OjoqqoqpskFQSCEsOZKksTzvMViSUlJOXTo0OnTp41GI5R6G/kSh2mKAJR6U4TwOQiAAAi4AwEmo1mI0f7Vfrsed9Q1t77FZrPpG9n6ihUrvLy8Bg4cmJubywKNDeOX9rvYbLaGBRzIsXinQzGHtw67NGxh6wV9WSA2NTX1zJkzsiwriqK3TV/RhbJD3x2a3cK3hJAxY8YYDAZPbfHSFl9f3+Dg4Li4ONYY/RAOiJizeJ7fuXNn586du3TpkpOTI0lSVVXVrbfeyir09va+4oormLp94YUXunbtev/997PwM5O5rJt6H/UVdlD9rX5ofYW5WG9bK60oivLDDz/4+fn5+PgwOKxfnp6eRUVFlFJCiCAIsbGxr732Wq9evXx8fLy1xc/P7/7779+5cyfP8yxkrihKWVnZuaHLlVdeaTAYvL29fXx8brnllnXr1pnNZt3drdQRVAsCTRKAUm8SEQqAAAiAgBsQYPkMLIGBZTvIsqxf9LdarSyIyC708zzPQo8soYLtxdZ1ibZixYoOHToMHDgwLy+PiT9CCKtTz69g9evSmakfFrNkJfXaWPNYEJQ1hoU8JUliK4IgsLQEVhtTyUxy6c1j/RJFsZX8IQhCTExM//79H3vssfLyclEUeZ5nDWPE2LUF+1a1UlKQoihjx4718vLq27fv8uXLQ0NDp0yZwlTpwIEDS0tLRVHUEbG2sYwXxpnBLygo2LJly+bNm41GoyAIFotl4cKFL7300oABAzw9Pbt168YceuTIkc2bN+/fv58lhzAfMScy/+rnjO5NdqowNayXoZSKoshxHM/zeri6lTzFlDpT5z179uzTp89VtUt5eTlDsWvXrptvvtnPzy8gIOCGG26YOHHikCFD/P39AwICevXq9Z///IedVxzHLVu2rEuXLkFBQaNHj37qqaduvPFGLy+vwMDAdevWQam3kgdRbfMJQKk3nxVKggAIgIDrEhAEwWw2m0wmjuN0cannIuuiU5fFVqvVYrHomQBsF47j9B46KHWm7Jm204W7JEkWi0VX6ix9gud5psV5nte1HTsuawYTc7Is8zwviiJTeLIsm0wmJnxZUF/P4tBX2I48z+uNdO6K1Wr9+OOPO3XqNGHChIKCAlmWrVYr48nyKNg607KEECaR9QCzExujK/XRo0czQVldXR0WFubj4+Pn57dr1y6WUM6cwgro2BlqhtdqtbK3bETElPTTTz/t6+vLlLooioIgcBzHeso8YrFY2FuO43SXsYsMzDVMCusHEkXRarWyUQ1LSpEkyYk0GlalK3UvL6/Y2FiHbrILCL169erUqZOfn99HH31UWVkpCILRaNyzZw+LnXfr1m3Xrl1s41133eXv73/nnXdWVFRYrdakpKShQ4f6+fk9+OCDlZWVDY+OLSDQlgSg1NuSNo4FAiAAAq1FgFL68ssvP/HEE+yqPRPNb7/99hPaYjabmSALDw+fNm3a66+/XlhYKAjCqVOnZs+ePX78+OHDh0+aNGnRokVZWVlMiL/33nsdOnS4/vrr8/LyWBDdbDavXbt2ypQpt99++7hx41588cV9+/ZZrVYWWz127Ngbb7xx55133nrrrePGjXvuued+/PHHyspKVtv+/fufeeaZf/7zn3v37p09e/a4ceNGjBgxc+bMY8eOVVRUvPfee3fdddfQ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zPD29vb399eHQ7/99ltAQICPj8/3338vimJkZKSXl5e3t/f69etZaF8QhFdeecXLy6tjx45Mqbf210aPqbOWsKGFr6/v22+/LUlSWlraoEGDfHx8XnjhBZPJ5NCYc56aP3++j49Pjx492KA0Ozt71qxZPXr0YAPFwMDAm2++ec6cOWfPnnWuWx1agrcg0BwCUOrNoYQyIAACIODqBNgMgw8//LCXl9fMmTNzc3MHDx7cu3fv999/39/ff/DgwXFxcVu2bDEYDDfccIPZbI6KigoKCjonr6+88sqBAwf269evf//+l112mZeX1zXXXMOyXzw8PNjcLzab7Z133vH09LzttttycnIc7qFcsWIF09ws8s0ELs/znTt39vT0nDp1qiiKv/zyS8eOHTt37hwREcFuS83MzPy///s/Dw+P1atXM40oCEJwcLCXl9ezzz5LCFm5cqWnp6eXl1fv3r2vvfbaa6655lx3AgICvLy8nnnmGavVqt/j6CzfyLI8Y8aMDh06hISElJWVsQTx1atXd+jQwdvb++zZs/qzckRRvOWWWzw9PSdOnMii+85qA6tHV+q33XbbmTNncnNzk5KSXn/9dT8/vy5duixatIjn+WXLlnXQlj59+vTt27dPnz7XXHNNx44d/f39586dy2ZpbKjUZVmeNm2artQppY899lhDpT5o0CA9+TsxMfHKK688J22/+uorWZY/+ugjDw8PLy8vlvljs9kIIWvXrvXy8goICGgzpf799997eHj4+vrefffdU6ZMeeyxx5588sm1a9ee62BGRsagQYM8PT2feuqphjF1RVGWL1/u7e3du3fvffv2sVtm2Tjwww8/HDZsmL+//7khJctct7/H2rkuRm0g0EwCUOrNBIViIAACIODSBNhTGz/99FMvL68BAwZERUX16NFj8ODBGRkZ/fv3P5dJvH379meeecbHx4cFuSMjI319fT09PQcNGhQcHDxixIix2jJOWxoq9VmzZnXo0CE4ODgvL4/ND6jjWLhwobe3t4eHh9lsZjeDsgfT9OnTx8vLi0XomVK/4oor9u7dyxKv8/PzO3To4OHhER4ezgLkPM9PmDDBy8vrueeeI4R8/PHHPj4+bHgwatSo4ODgMWPGBAcHjx079vXXX2eRe6fE1PWONFTqhJAvvviC5fpXVFToSl2W5TFjxnh5eYWEhEiS5PTIq67Ug4OD2VQzPM8XFhY+9NBDPj4+w4YNO3369KJFi7y9vTt06HD77bePGjVq9OjRwcHBI0eODA4O/vDDDzmOi4yMdFDqTFU/8cQTHh4eLE+9UaVuMBhGjRrF0vcppSkpKVdddZWXl9d///vfcwTmz5/Ppkc0m80MnaIo69ev9/T0DAwMbP2wtbYAACAASURBVGOl7uXllZKSwi7ysPkiZVkuLS0dMmSIh4dHSEhIRUWF7l+2IsvyP//5z3OXCPr16xcbG8tmsGHT+PA8bzabd+7cOXTo0MDAwH79+mVmZjrsjrcg0MYEoNTbGDgOBwIgAAKtQkBRFEEQ9uzZ07Vr18suu+zFF1/09fV96KGHzk358tZbb/n6+i5YsKBXr14BAQH79+8XBOHYsWNBQUEGg+GDDz4o0Zby8vLS0tKysrJzKeMN7yhduHChj4/PkCFD2FQbkiTFx8enpKSUlZV9++23fn5+525m/f3335nmliSptLTU39/f09Nz5syZoihu2LAhKCioW7due/fuZfOl5OXleXp6enh4bNu2jYldQRBCQkJYTJ1S+vPPP7NE9gMHDpSWlpaXl7O2FRYWVlRUtEYasSiKM2bM8PT0DAkJYZnfkiRt3bqVhZB37NjBZi0khFRUVAwePJiNQziOc/o9lLpSHzVqlD5JZXV19cyZM728vG666abExMRvvvmGjbWOHDnC+BQXFxcVFRUWFlZWVlosFqbUPTw8Tp8+zQLkbHgzefJkg8EwcOBA5ggWU584cSIbgM2cOdPT03PkyJH6fO1paWl9+vQ5d4/Bl19+KUnS//73P5ZtEhMTwy47SJK0aNEiX1/foKCg9PR0hwcztcbpTildt24dGzCkpaWxyxosi4lNPDplyhR2y/LRo0fZDKT6/aYFBQWjRo1idyMUFxdXVlYePnz4hx9+YBO/8Nry+eefn/tqBAYGxsfHt0b7UScINJ8AlHrzWaEkCIAACLguAZY/nZyczCZXYVOCrF69mj2p0cfH57rrrvP09BwyZMiZM2ckSSopKenSpYu3t/e9995rMpnYFNTffPPN1KlTS0tLBUFwyFNnk7d07Nhx//79FoulqqqKTcbyyiuvlJWVBQYGGgyGKVOmVFdXs9m1v/jiC19fXx8fn1WrVvE8v2HDhsDAwG7duu3bt48pqvz8fE9Pzw4dOrB8GJYmPm7cOE9Pz2effZZSmp+fz+aueeWVV9h03aWlpX//+99fe+21qqoqi8WiR7id5RWe51966SUvL68xY8ZkZ2ezdHCTyXT55Zd7e3tPmjSJPULIbDZv2bLlyiuvPJcmsXTp0taYlFBX6qNHj2YTuVgsloyMjD59+vj4+IwYMSIzMzM7O5vl8c+bN4/lyhcWFj7++ONhYWEsbX3btm3sqkVmZia7O9ZqtWZkZLC5d5544gl2zjClPmHCBCbNWf7PiBEj2FtFUdLT0/v06dOhQ4dVq1bJshwXF8eSQ2bMmMHm78/JyRk9enSHDh06deqUkZHhkBzlLO/Y18PybdhILzU1lT0Hih3Xoi0RERFs9Dhu3DiWKMXuUa6qqvr88899fHwCAwMXLlzIcdwPP/zAsvD379/PTjOO41avXu3l5XXZZZclJSXZHxfrIND2BKDU2545jggCIAACzifAAplms/nRRx9lsw0GBgbm5eWJomg2m/v37+/n5+fp6fnYY48xMS2K4ooVKwIDA/38/KZPn/7111/Pnj2bTb23fPnyhkq9pKTkxhtvZA9a//jjj2fOnNlJW77//nue519//fXAwMCOHTs+++yzK1eufPPNN3v16uXn5zdmzJj09HRBEP6AUme5KCy0+frrr69atWr69OkBAQEdO3b86aefOG1xLsdzYu6tt946l+bRvXv3d95557PPPktKSjKZTOwZlgaD4YEHHvj0009nz57dv39/hiI6OprpXefm4ehKvWfPnm+++easWbOmTJnSvXt3Ng/jihUr2LOKHn30UV9f365du77zzjvffPPNlClTAgMDr7zyyh07dgiCsGXLFnYnQGZm5tdff/3UU0/NnDlz4MCBBoOha9euLA1Jz35pplInhFgslgceeMDDwyMgIOC+++57/fXXR40a1aNHDx8fn6CgoDZW6t7e3u++++7q1atXrVr1tbbs2bOHPdVrxowZbKagsWPH/ve//92wYcO333773HPP+fv7GwyGiRMnlpaW8jxfWVk5cODAgICAm2++edWqVbt37169evVtt91mMBhGjBhRUFDg3HMMtYHAxRKAUr9YYigPAiAAAq5IgClFRVE+/fRTdn8nu9mRRbifffZZX2157733WACSEHIul4Opc/aRwWC4/PLLw8LCKisrrVbre++95+vrO3DgwDNnzrBKTp06NXToUF9fX29vby8v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sU5n9MSJE91ut6Iosizn558YNnSUw9G0eVyrK3pcPWDAzQMG3NLzil42a7TD0fS3v/1/x47mM1jmFIpGhDJDQqDmuGCulJBAu2wLBaVujqY3Vx+u6W2tlAkhiqLs379/zpw5RUVFZWVlV111VXx8/LJly1555RUxxW632636YbPZnE6nxWIZP358WVmZmF9HCJWUlCxcuHD58uU7duxITk5u3759fn4+xjg3N7d3795RUVEHDx7csWOHzWb7/e9/H0KljhAqLCz85ptvkpN6XnXVteuyN8kSWrrkLavVMXfek5KsfLVlS8dOnVu2av3SggX5BSewtnpA27uGs5poQ5ki9tip/CtHTk6OxWIZMmRIaWlpeXn5iJEjrTbbv//zbxWhs4WFCxctumXQrXv27hVr8U/9fDr32NG8vPyMjIxPPlmZnb1uzZq12dnr1m3ctH7Tl9kbNmZv2Lh2/YZVX6RmZq45caLg8OHc/PwCfRefUNYayja2GT106FC7du2cTmdy8hXp6Vk/n/6luLj0u28PTJr0oNMZHRcXv3p1qqKoHo/00EPT9F7bdMaMlG+//aG83F149tz+fd/NmfNkbGxzpyP2vomT3W4PpdrXMDiAABAIcwK1jumQwY8EQKn7EWYATYV5p63VvVrRYIwlSRo/fnxMTMzw4cN//PHHHj16dOrUadWqVfHx8TabbenSpSdPniwoKDh79uyePXt69erldDrfeustVVXFhLrQ+mI9zL59+5KTkzt06HDixAlK6dGjR6+77rqoqKiffvrpm2++sVgsgwYNCqFSF5tOlpWVDRk8wm6L6da1+65v9i5Z/E+nI3b2nLlFxedGjR7rdMb06NFz2/btbsmDMNa0EdVD2Ih1xphYejR69OiHH374+eeff/bZZ6dOndqsWbPhw4eXlZWVl5ePHj06JibmxRdf/Mtf/pKQkCC+Yt16661nz541rpnCs0UT7rjLYXNGO2LsVofN6oiy2ESw2Rw2u9Nqc9x++536MgpNyBmbWxoWIBJkApRSVVUJIY888ohYpbZhwyZFQdoOnZRhTD0eecKEu99++1+ydo8BOXjwR6vVbrXa+/W7QVUR59ojvihliqIWFJwaNmxEdHRst25JO3d+wzknhAS5OlAcEAAC9SVQ65gOGfxIAJS6H2EG0FR9e1G45a8VDcYYIbR58+bu3bvHxsYO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5mh2LOA/EAACQAAIAAHTEWjwqA0nNoAAKPUGQAvBKabrxtUcDhCyaqXASyAABIAAEAACQCDQBAI0poNZnwRAqfvEEnaJge51gbYfIKCBdhvsAwEgAASAABAAAtUIBGhMB7M+CYBS94kFEoEAEAACQAAIAAEgAASAQIgJgFIPcQNA8UAACAABIAAEgAAQAAJAwCcBUOo+sUAiEAACQAAIAAEgAASAABAIMQFQ6iFuACgeCAABIAAEgAAQAAJAAAj4JABK3ScWSAQCQAAIAAEgAASAABAAAiEmAEo9xA0AxQMBIAAEgAAQAAJAAAgAAZ8EQKn7xAKJQAAIAAEgAASAABAAAkAgxARAqYe4AaB4IAAEgAAQAAJAAAgAASDgkwAodZ9YIBEIAAEgAASAABAAAkAACISYACj1EDcAFA8EgAAQAAJAAAgAASAABHwSAKXuEwskAgEgAASAABAAAkAACACBEBMApR7iBoDigQAQAAJAAAgAASAABICATwKg1H1igUQgAASAABAAAkAACAABIBBiAqDUQ9wAUDwQAAJAAAgAASAABIAAEPBJAJS6TyyQCASAABAAAkAACAABIAAEQkwAlHqIGwCKBwJAAAgAASAABIAAEAACPgmAUveJBRKBABAAAkAACAABIAAEgECICYBSD3EDQPFAAAgAASAABIAAEAACQMAnAVDqPrFAIhAAAkAACAABIAAEgAAQCDEBUOohbgAoHggAASAABIAAEAACQAAI+CQASt0nFkgEAkAACAABIAAEgAAQAAIhJgBKPcQNAMUDASAABIAAEAACQAAIAAGfBECp+8QCiUAACAABIAAEgAAQAAJAIMQEQKmHuAGgeCAABIAAEAACQAAIAAEg4JNAXZX6cTiAABAAAkAACAABIAAEgAAQqCcBnxK8jol1Vep1NAfZgAAQAAJAAAgAASAABIAAEPALAVDqfsEIRoAAEAACQAAIAAEgAASAgJ8JgFL3M1AwBwSAABAAAkAACAABIAAE/EIAlLpfMIIRIAAEgAAQAAJAAAgAASDgZwKg1P0MFMwBASAABIAAEAACQAAIAAG/EACl7heMYAQIAAEgAASAABAAAkAACPiZACh1PwMFc0AACAABIAAEgAAQAAJAwC8EQKn7BSMYAQJAAAgAASAABIAAEAACfiYASt3PQMEcEAACQAAIAAEgAASAABDwCwFQ6n7BCEaAABAAAkAACAABIAAEgICfCYBS9zNQMAcEgAAQAAJAAAgAASAABPxCAJS6XzCCESAABIAAEAACQAAIAAEg4GcCoNT9DBTMAQEgAASAABAAAkAACAABvxD4/8X3rVwwziWGAAAAAElFTkSuQmCC"
    }
   },
   "cell_type": "markdown",
   "id": "4648bdeb",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "dd1a7b00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.5919, -0.2738, -1.1406,  0.3324, -0.3442]],\n",
       "       grad_fn=<EmbeddingBackward0>)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_em = nn.Embedding(100,5)\n",
    "test_a = torch.Tensor([2]).long()\n",
    "test_em(test_a)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "cc6828e9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[-0.0644, -0.3230, -0.9310,  0.9450,  0.9535],\n",
       "         [ 0.5919, -0.2738, -1.1406,  0.3324, -0.3442],\n",
       "         [ 1.6066, -0.7381,  1.0068, -0.7593, -1.0135]],\n",
       "\n",
       "        [[-0.0644, -0.3230, -0.9310,  0.9450,  0.9535],\n",
       "         [ 0.5919, -0.2738, -1.1406,  0.3324, -0.3442],\n",
       "         [-0.2306, -1.4097, -0.7157, -1.4338,  0.9402]]],\n",
       "       grad_fn=<EmbeddingBackward0>)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_a = torch.Tensor([[1,2,4],[1,2,3]]).long() # （2,3）\n",
    "test_em(test_a)  # （2,3,4）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "db6aad40",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1,)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "np.random.randn(3,1)[0].shape  # 2行3列的随机数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "b886b2ff",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 编码器 层\n",
    "'''\n",
    "    单个层\n",
    "    \n",
    "    例如 一个单词  i m .   转换成词向量 tensor([[2],[3],[4],[1]])  \n",
    "    input 直接取第一个 tensor([[2]])   形状是1维的 (1，),整个句子 依次循环输入进去，这里面的input是一个单词一个单词输入的\n",
    "    \n",
    "    \n",
    "    input: 单个词是tensor([[2]])   size是 (1,))\n",
    "    hidden: gru层的hidden的维度是 (1,1,hiden_size)  假设根据 initHidden 函数进行生成 那么维度就是 (隐藏层个数,batch_size,hidden_size)   依次对应 1  1   hidden_size\n",
    "    \n",
    "\n",
    "    forward中计算的逻辑\n",
    "        - embedding层处理\n",
    "            (1,) ->  (1,hidden_size)    这里 hidden_size是词嵌入维度\n",
    "        view(1,1-1)\n",
    "            (1,hidden_size) -> (1,1,hidden_size)  gru的输入数据需要携带batch_size,且是3维 (句子长度,batch_ize,词向量维度)  句子长度是1  batch_size是1 词向量维度是hidden_size\n",
    "\n",
    "        gru层计算\n",
    "            output输出维度是    (1,1,hidden_size) -> (1,1,hidden_size)  依次对应  (RNN时间序列个数,batch_size,hidden_size)   # 依次是  1,1,,hidden_size\n",
    "            hidden输出维度是    (1,1,hidden_size) -> (1,1,hidden_size)  依次对应  (隐藏层个数,batch_size,hidden_size)   # 依次是  1,1,,hidden_size\n",
    "       \n",
    "    备注:\n",
    "\n",
    "'''\n",
    "\n",
    "class EncoderRNN(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size):\n",
    "        \"\"\"它的初始化参数有两个, input_size代表解码器的输入尺寸即源语言的\n",
    "            词表大小，hidden_size代表GRU的隐层节点数, 也代表词嵌入维度, 同时又是GRU的输入尺寸\"\"\"\n",
    "        super(EncoderRNN, self).__init__()\n",
    "        # 将参数hidden_size传入类中\n",
    "        self.hidden_size = hidden_size\n",
    "        # 实例化nn中预定义的Embedding层, 它的参数分别是input_size, hidden_size\n",
    "        # 这里的词嵌入维度即hidden_size\n",
    "        # nn.Embedding的演示在该代码下方\n",
    "        self.embedding = nn.Embedding(input_size, hidden_size)\n",
    "        # 然后实例化nn中预定义的GRU层, 它的参数是hidden_size\n",
    "        # nn.GRU的演示在该代码下方\n",
    "        self.gru = nn.GRU(hidden_size, hidden_size)\n",
    "\n",
    "    def forward(self, input, hidden):\n",
    "        \"\"\"编码器前向逻辑函数中参数有两个, input代表源语言的Embedding层输入张量\n",
    "           hidden代表编码器层gru的初始隐层张量\"\"\"\n",
    "        # 将输入张量进行embedding操作, 并使其形状变为(1,1,-1),-1代表自动计算维度\n",
    "        # 理论上，我们的编码器每次只以一个词作为输入, 因此词汇映射后的尺寸应该是[1, embedding]\n",
    "        # 而这里转换成三维的原因是因为torch中预定义gru必须使用三维张量作为输入, 因此我们拓展了一个维度\n",
    "        output = self.embedding(input).view(1, 1, -1)     \n",
    "        # 然后将embedding层的输出和传入的初始hidden作为gru的输入传入其中, \n",
    "        # 获得最终gru的输出output和对应的隐层张量hidden， 并返回结果\n",
    "        output, hidden = self.gru(output, hidden)\n",
    "        return output, hidden  #  (1,1,hidden_size)\n",
    "\n",
    "    def initHidden(self):\n",
    "        \"\"\"初始化隐层张量函数\"\"\"\n",
    "        # 将隐层张量初始化成为1x1xself.hidden_size大小的0张量\n",
    "        return torch.zeros(1, 1, self.hidden_size, device=device)  #  hidden_num  隐藏层个数  ,batch_size=1, 批次大小 , hidden_size=self.hidden_size  隐藏层维度\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "9764ea67",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['he is one of the american presidential candidates .',\n",
       " 'il est un des candidats aux presidentielles americaines .']"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pair"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2b252a9e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([14])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# input里面第一个元素      he is one of the american presidential candidates .  he对应的是14\n",
    "pair_tensor[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "3af1f0e4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[ 0.2585, -0.2465,  0.3388, -0.3201, -0.2341, -0.0514, -0.1429,\n",
      "          -0.4690, -0.1895,  0.1993, -0.1156, -0.4447, -0.1186, -0.2696,\n",
      "          -0.0385,  0.2277,  0.0172, -0.1136, -0.4478, -0.1316,  0.2850,\n",
      "           0.3072,  0.2536,  0.0983, -0.4164]]], grad_fn=<StackBackward0>)\n",
      "torch.Size([1, 1, 25])\n",
      "torch.Size([1, 1, 25])\n"
     ]
    }
   ],
   "source": [
    "# 先测试一波  tensor([14]) 单词做测试\n",
    "\n",
    "hidden_size = 25  # 每个词的维度 每个词生成25个维度  同时 hidden_size 也当做是隐藏层的维度  等于 输入多少维度，输出也是多少维度\n",
    "input_size = 200  # 词的总数  例如200个词\n",
    "\n",
    "# pair_tensor[0]代表源语言即英文的句子，pair_tensor[0][0]代表句子中的第一个词\n",
    "input = pair_tensor[0][0]  # tensor([14])\n",
    "# 初始化第一个隐层张量，1x1xhidden_size的0张量\n",
    "hidden = torch.zeros(1, 1, hidden_size)  #  隐藏层的维度  1x1x25\n",
    "\n",
    "encoder = EncoderRNN(input_size, hidden_size)\n",
    "encoder_output, hidden = encoder(input, hidden)\n",
    "print(encoder_output)  \n",
    "print(encoder_output.size())  # torch.Size([1, 1, 25])\n",
    "print(hidden.size())  # torch.Size([1, 1, 25])\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "54488426",
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "解码器，不携带  attention 机制的\n",
    "\n",
    "也是一个单词一个单词的输入进去,只不过 解码器输入的是法文，也就是目标的语言\n",
    "\n",
    "\n",
    "\n",
    "    input: 单个词是tensor([[2]])   size是 (1,))\n",
    "    hidden: gru层的hidden的维度是 (1,1,hiden_size)  假设根据 initHidden 函数进行生成 那么维度就是 (隐藏层个数,batch_size,hidden_size)   依次对应 1  1   hidden_size\n",
    "    \n",
    "\n",
    "    forward中计算的逻辑\n",
    "        - embedding层处理\n",
    "            (1,) ->  (1,hidden_size)    这里 hidden_size是词嵌入维度\n",
    "\n",
    "        - view(1,1-1)\n",
    "            (1,hidden_size) -> (1,1,hidden_size)  gru的输入数据需要携带batch_size,且是3维 (句子长度,batch_ize,词向量维度)  句子长度是1  batch_size是1 词向量维度是hidden_size\n",
    "        - relu层\n",
    "            (1,hidden_size) -> (1,hidden_size)\n",
    "\n",
    "        gru层计算\n",
    "            output输出维度是    (1,1,hidden_size) -> (1,1,hidden_size)  依次对应  (RNN时间序列个数,batch_size,hidden_size)   # 依次是  1,1,,hidden_size\n",
    "            hidden输出维度是    (1,1,hidden_size) -> (1,1,hidden_size)  依次对应  (隐藏层个数,batch_size,hidden_size)   # 依次是  1,1,,hidden_size\n",
    "       \n",
    "       output[0]\n",
    "        (1,1,hidden_size) -> (1,hidden_size)\n",
    "        \n",
    "         - 线性层处理\n",
    "            (1,hidden_size) -> (1,output_size)   线性层处理，将gru的输出映射到目标语言的词表大小\n",
    "\n",
    "        - logsoftmax处理\n",
    "            (1,output_size) -> (1,output_size)   对线性层处理后的结果进行softmax处理，以便于分类,这里不仅仅进行了 softmax 还对结果进行了  log处理\n",
    "            \n",
    "'''\n",
    "\n",
    "class DecoderRNN(nn.Module):\n",
    "    def __init__(self, hidden_size, output_size):\n",
    "        \"\"\"初始化函数有两个参数，hidden_size代表解码器中GRU的输入尺寸，也是它的隐层节点数\n",
    "           output_size代表整个解码器的输出尺寸, 也是我们希望得到的指定尺寸即目标语言的词表大小\"\"\"\n",
    "        super(DecoderRNN, self).__init__()\n",
    "        # 将hidden_size传入到类中\n",
    "        self.hidden_size = hidden_size\n",
    "        # 实例化一个nn中的Embedding层对象, 它的参数output这里表示目标语言的词表大小\n",
    "        # hidden_size表示目标语言的词嵌入维度\n",
    "        self.embedding = nn.Embedding(output_size, hidden_size)\n",
    "        # 实例化GRU对象，输入参数都是hidden_size，代表它的输入尺寸和隐层节点数相同\n",
    "        self.gru = nn.GRU(hidden_size, hidden_size)\n",
    "        # 实例化线性层, 对GRU的输出做线性变化, 获我们希望的输出尺寸output_size\n",
    "        # 因此它的两个参数分别是hidden_size, output_size\n",
    "        self.out = nn.Linear(hidden_size, output_size)\n",
    "        # 最后使用softmax进行处理，以便于分类\n",
    "        self.softmax = nn.LogSoftmax(dim=1)\n",
    "\n",
    "\n",
    "    def forward(self, input, hidden):\n",
    "        \"\"\"解码器的前向逻辑函数中, 参数有两个, input代表目标语言的Embedding层输入张量\n",
    "           hidden代表解码器GRU的初始隐层张量\"\"\"\n",
    "        # 将输入张量进行embedding操作, 并使其形状变为(1,1,-1),-1代表自动计算维度\n",
    "        # 原因和解码器相同，因为torch预定义的GRU层只接受三维张量作为输入\n",
    "        output = self.embedding(input).view(1, 1, -1) # (1,1,hidden_size)\n",
    "        # 然后使用relu函数对输出进行处理，根据relu函数的特性, 将使Embedding矩阵更稀疏，以防止过拟合\n",
    "        output = F.relu(output) # (1,1,hidden_size)\n",
    "        # 接下来, 将把embedding的输出以及初始化的hidden张量传入到解码器gru中\n",
    "        output, hidden = self.gru(output, hidden)  # (1,1,hidden_size)   (1,1,hidden_size) 输出 (1,1,hidden_size),(1,1,hidden_size)\n",
    "\n",
    "        # 因为GRU输出的output也是三维张量，第一维没有意义，因此可以通过output[0]来降维\n",
    "        # 再传给线性层做变换, 最后用softmax处理以便于分类\n",
    "        output = self.softmax(self.out(output[0]))  # (1,hidden_size) -> (1,output_size) output_size表示有多少个单次量，\n",
    "\n",
    "\n",
    "        return output, hidden\n",
    "\n",
    "    def initHidden(self):\n",
    "        \"\"\"初始化隐层张量函数\"\"\"\n",
    "        # 将隐层张量初始化成为1x1xself.hidden_size大小的0张量\n",
    "        return torch.zeros(1, 1, self.hidden_size, device=device)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "311cb4db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([14])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "input"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "4679aedd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output.size:torch.Size([1, 334])\n",
      "hidden.size:torch.Size([1, 1, 25])\n"
     ]
    }
   ],
   "source": [
    "# 测试下\n",
    "\n",
    "input = pair_tensor[0][0]\n",
    "# 初始化第一个隐层张量，1x1xhidden_size的0张量\n",
    "hidden = torch.zeros(1, 1, hidden_size)\n",
    "\n",
    "\n",
    "hidden_size = 25   # 输入到GRU的维度  也就是翻译的法文的词向量\n",
    "output_size = 334  # 输出法文的词的总数，\n",
    "\n",
    "decoder = DecoderRNN(hidden_size, output_size) # \n",
    "output, hidden = decoder(input, hidden)\n",
    "# print(output) \n",
    "print('output.size:{}'.format(output.size())) # [1, 100]   100 就是 line层转换之后的维度  单个词的维度，在经过softmax 在log下\n",
    "print('hidden.size:{}'.format(hidden.size())) # [1, 1, 25]  25就是 hidden_size\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "949fdaf2",
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "引入 注意力机制\n",
    "\n",
    "embedding\n",
    "    单个维度转换\n",
    "        (1,) ->  (1,hidden_size)\n",
    "\n",
    "    view\n",
    "        转换成  (1,1,hidden_size)\n",
    "\n",
    "    dropout\n",
    "        (1,1,hidden_size)\n",
    "    \n",
    "    attn_weights = F.softmax(self.attn(torch.cat((embedded[0], hidden[0]), 1)), dim=1)\n",
    "        维度转换   \n",
    "        (1,1,hidden_size)  ->  (1,hidden_size)+(1,hidden_size)   ->  (1,hidden_size+hidden_size)  \n",
    "\n",
    "    self.attn \n",
    "        (1,hidden_size+hidden_size) @ (self.hidden_size * 2, self.max_length)  ->  (1,self.max_length)\n",
    "    \n",
    "     F.softmax\n",
    "        (1,self.max_length)  ->  (1,self.max_length)\n",
    "    \n",
    "\n",
    "    torch.bmm(attn_weights.unsqueeze(0), encoder_outputs.unsqueeze(0))\n",
    "    \n",
    "        (1,1,,self.max_length) * (..)\n",
    "        \n",
    "    output = torch.cat((embedded[0], attn_applied[0]), 1)\n",
    "        embedded[0] : (1,hidden_size) \n",
    "         attn_applied :\n",
    "        output的维度是 (1,hidden_size+)\n",
    "        \n",
    "    self.attn_combine(output).unsqueeze(0)\n",
    "        转换之后维度是 (1,1,self.hidden_size)\n",
    "        \n",
    "    gru\n",
    "        输入 (1,1,self.hidden_size)    H0  (1,1,self.hidden_size) \n",
    "        最后维度 (1,1,hidden_size)\n",
    "\n",
    "    output = F.log_softmax(self.out(output[0]), dim=1)\n",
    "        (1,hidden_size) & (self.hidden_size, self.output_size) -> (1,hidden_size)\n",
    "        最后的维度 (1,self.output_size)\n",
    "    \n",
    "    \n",
    "    \n",
    "\n",
    "'''\n",
    "\n",
    "class AttnDecoderRNN(nn.Module):\n",
    "    def __init__(self, hidden_size, output_size, dropout_p=0.1, max_length=MAX_LENGTH):\n",
    "        \"\"\"初始化函数中的参数有4个, hidden_size代表解码器中GRU的输入尺寸，也是它的隐层节点数\n",
    "           output_size代表整个解码器的输出尺寸, 也是我们希望得到的指定尺寸即目标语言的词表大小\n",
    "           dropout_p代表我们使用dropout层时的置零比率，默认0.1, max_length代表句子的最大长度\"\"\"\n",
    "        super(AttnDecoderRNN, self).__init__()\n",
    "        # 将以下参数传入类中\n",
    "        self.hidden_size = hidden_size\n",
    "        self.output_size = output_size\n",
    "        self.dropout_p = dropout_p\n",
    "        self.max_length = max_length\n",
    "\n",
    "        # 实例化一个Embedding层, 输入参数是self.output_size和self.hidden_size\n",
    "        self.embedding = nn.Embedding(self.output_size, self.hidden_size)\n",
    "        # 根据attention的QKV理论，attention的输入参数为三个Q，K，V，\n",
    "        # 第一步，使用Q与K进行attention权值计算得到权重矩阵, 再与V做矩阵乘法, 得到V的注意力表示结果.\n",
    "        # 这里常见的计算方式有三种:\n",
    "        # 1，将Q，K进行纵轴拼接, 做一次线性变化, 再使用softmax处理获得结果最后与V做张量乘法\n",
    "        # 2，将Q，K进行纵轴拼接, 做一次线性变化后再使用tanh函数激活, 然后再进行内部求和, 最后使用softmax处理获得结果再与V做张量乘法\n",
    "        # 3，将Q与K的转置做点积运算, 然后除以一个缩放系数, 再使用softmax处理获得结果最后与V做张量乘法\n",
    "\n",
    "        # 说明：当注意力权重矩阵和V都是三维张量且第一维代表为batch条数时, 则做bmm运算.\n",
    "\n",
    "        # 第二步, 根据第一步采用的计算方法, 如果是拼接方法，则需要将Q与第二步的计算结果再进行拼接, \n",
    "        # 如果是转置点积, 一般是自注意力, Q与V相同, 则不需要进行与Q的拼接.因此第二步的计算方式与第一步采用的全值计算方法有关.\n",
    "        # 第三步，最后为了使整个attention结构按照指定尺寸输出, 使用线性层作用在第二步的结果上做一个线性变换. 得到最终对Q的注意力表示.\n",
    "\n",
    "        # 我们这里使用的是第一步中的第一种计算方式, 因此需要一个线性变换的矩阵, 实例化nn.Linear\n",
    "        # 因为它的输入是Q，K的拼接, 所以输入的第一个参数是self.hidden_size * 2，第二个参数是self.max_length\n",
    "        # 这里的Q是解码器的Embedding层的输出, K是解码器GRU的隐层输出，因为首次隐层还没有任何输出，会使用编码器的隐层输出\n",
    "        # 而这里的V是编码器层的输出\n",
    "        self.attn = nn.Linear(self.hidden_size * 2, self.max_length)\n",
    "        # 接着我们实例化另外一个线性层, 它是attention理论中的第四步的线性层，用于规范输出尺寸\n",
    "        # 这里它的输入来自第三步的结果, 因为第三步的结果是将Q与第二步的结果进行拼接, 因此输入维度是self.hidden_size * 2\n",
    "        self.attn_combine = nn.Linear(self.hidden_size * 2, self.hidden_size)\n",
    "        # 接着实例化一个nn.Dropout层，并传入self.dropout_p\n",
    "        self.dropout = nn.Dropout(self.dropout_p)\n",
    "        # 之后实例化nn.GRU, 它的输入和隐层尺寸都是self.hidden_size\n",
    "        self.gru = nn.GRU(self.hidden_size, self.hidden_size)\n",
    "        # 最后实例化gru后面的线性层，也就是我们的解码器输出层.\n",
    "        self.out = nn.Linear(self.hidden_size, self.output_size)\n",
    "\n",
    "\n",
    "    def forward(self, input, hidden, encoder_outputs):\n",
    "        \"\"\"forward函数的输入参数有三个, 分别是源数据输入张量, 初始的隐层张量, 以及解码器的输出张量\"\"\"\n",
    "\n",
    "        # 根据结构计算图, 输入张量进行Embedding层并扩展维度\n",
    "        embedded = self.embedding(input).view(1, 1, -1)  # 输入的维度是(1,1,self.hidden_size)\n",
    "        # 使用dropout进\t行随机丢弃，防止过拟合\n",
    "        embedded = self.dropout(embedded)\n",
    "\n",
    "        # 进行attention的权重计算, 哦我们呢使用第一种计算方式：\n",
    "        # 将Q，K进行纵轴拼接, 做一次线性变化, 最后使用softmax处理获得结果\n",
    "        attn_weights = F.softmax(\n",
    "            self.attn(torch.cat((embedded[0], hidden[0]), 1)), dim=1)  # （1，hidden_size）+ (1,hidden_size) -> (1,2*hidden_size) -attn-> (1,self.max_length) -softmax->(1,self.max_length)\n",
    "\n",
    "        \n",
    "        # 然后进行第一步的后半部分, 将得到的权重矩阵与V做矩阵乘法计算, 当二者都是三维张量且第一维代表为batch条数时, 则做bmm运算\n",
    "        attn_applied = torch.bmm(attn_weights.unsqueeze(0),  \n",
    "                                 encoder_outputs.unsqueeze(0))  # (1,1,self.max_length) * (1,self.max_length,self.hidden_size) -> (1,1,self.hidden_size)\n",
    "\n",
    "        # 之后进行第二步, 通过取[0]是用来降维, 根据第一步采用的计算方法, 需要将Q与第一步的计算结果再进行拼接\n",
    "        output = torch.cat((embedded[0], attn_applied[0]), 1) # embedded[0] : (1,hidden_size)  attn_applied : (1,self.hidden_size)  (1,2*hidden_size)\n",
    "\n",
    "\n",
    "        # 最后是第三步, 使用线性层作用在第三步的结果上做一个线性变换并扩展维度，得到输出\n",
    "        output = self.attn_combine(output).unsqueeze(0) # (1,1,hidden_size)\n",
    "\n",
    "        # attention结构的结果使用relu激活\n",
    "        output = F.relu(output)\n",
    "\n",
    "        # 将激活后的结果作为gru的输入和hidden一起传入其中\n",
    "        output, hidden = self.gru(output, hidden) # output=(1,1,hidden_size)  hidden=(1,1,hidden_size)  gru的输出是(1,1,hidden_size)  hidden=(1,1,hidden_size)\n",
    "\n",
    "\n",
    "        # 最后将结果降维并使用softmax处理得到最终的结果\n",
    "        output = F.log_softmax(self.out(output[0]), dim=1) #  (1,self.output_size)\n",
    "        # 返回解码器结果，最后的隐层张量以及注意力权重张量\n",
    "        return output, hidden, attn_weights\n",
    "\n",
    "    def initHidden(self):\n",
    "        \"\"\"初始化隐层张量函数\"\"\"\n",
    "        # 将隐层张量初始化成为1x1xself.hidden_size大小的0张量\n",
    "        return torch.zeros(1, 1, self.hidden_size, device=device)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "d4e1f466",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 100])\n"
     ]
    }
   ],
   "source": [
    "hidden_size = 25\n",
    "output_size = 100\n",
    "input = pair_tensor[1][0]\n",
    "hidden = torch.zeros(1, 1, hidden_size)\n",
    "# encoder_outputs需要是encoder中每一个时间步的输出堆叠而成\n",
    "# 它的形状应该是10x25, 我们这里直接随机初始化一个张量\n",
    "encoder_outputs  = torch.randn(MAX_LENGTH, 25) # 10x25\n",
    "\n",
    "decoder = AttnDecoderRNN(hidden_size, output_size)\n",
    "output, hidden, attn_weights= decoder(input, hidden, encoder_outputs)\n",
    "print(output.shape)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6896a26e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置teacher_forcing比率为0.5\n",
    "teacher_forcing_ratio = 0.5\n",
    "\n",
    "\n",
    "def train(input_tensor, target_tensor, encoder, decoder, encoder_optimizer, decoder_optimizer, criterion, max_length=MAX_LENGTH):\n",
    "    \"\"\"训练函数, 输入参数有8个, 分别代表input_tensor：源语言输入张量，target_tensor：目标语言输入张量，encoder, decoder：编码器和解码器实例化对象\n",
    "       encoder_optimizer, decoder_optimizer：编码器和解码器优化方法，criterion：损失函数计算方法，max_length：句子的最大长度\"\"\"\n",
    "\n",
    "    # 初始化隐层张量\n",
    "    encoder_hidden = encoder.initHidden()\n",
    "\n",
    "    # 编码器和解码器优化器梯度归0\n",
    "    encoder_optimizer.zero_grad()\n",
    "    decoder_optimizer.zero_grad()\n",
    "\n",
    "    # 根据源文本和目标文本张量获得对应的长度\n",
    "    \n",
    "    '''\n",
    "    input数据\n",
    "        tensor([[2],\n",
    "         [3],\n",
    "         [4],\n",
    "         [1]])\n",
    "         \n",
    "    output数据\n",
    "    tensor([[2],\n",
    "         [3],\n",
    "         [4],\n",
    "         [5],\n",
    "         [1]])\n",
    "    \n",
    "    '''\n",
    "    \n",
    "    input_length = input_tensor.size(0)\n",
    "    target_length = target_tensor.size(0)\n",
    "\n",
    "    # 初始化编码器输出张量，形状是max_lengthxencoder.hidden_size的0张量\n",
    "    encoder_outputs = torch.zeros(max_length, encoder.hidden_size, device=device)\n",
    "\n",
    "    # 初始设置损失为0\n",
    "    loss = 0\n",
    "\n",
    "    # 循环遍历输入张量索引\n",
    "    for ei in range(input_length):\n",
    "        # 根据索引从input_tensor取出对应的单词的张量表示，和初始化隐层张量一同传入encoder对象中\n",
    "        encoder_output, encoder_hidden = encoder(\n",
    "            input_tensor[ei], encoder_hidden) # (1,1,hidden_size),(1,1,hidden_size)\n",
    "        # 将每次获得的输出encoder_output(三维张量), 使用[0, 0]降两维变成向量依次存入到encoder_outputs\n",
    "        # 这样encoder_outputs每一行存的都是对应的句子中每个单词通过编码器的输出结果\n",
    "        encoder_outputs[ei] = encoder_output[0, 0] # (hidden_size,)\n",
    "\n",
    "    # 初始化解码器的第一个输入，即起始符\n",
    "    decoder_input = torch.tensor([[SOS_token]], device=device)\n",
    "\n",
    "    # 初始化解码器的隐层张量即编码器的隐层输出\n",
    "    decoder_hidden = encoder_hidden\n",
    "\n",
    "    # 根据随机数与teacher_forcing_ratio对比判断是否使用teacher_forcing\n",
    "    use_teacher_forcing = True if random.random() < teacher_forcing_ratio else False\n",
    "\n",
    "    # 如果使用teacher_forcing\n",
    "    if use_teacher_forcing:\n",
    "        # 循环遍历目标张量索引\n",
    "        for di in range(target_length):\n",
    "            # 将decoder_input, decoder_hidden, encoder_outputs即attention中的QKV, \n",
    "            # 传入解码器对象, 获得decoder_output, decoder_hidden, decoder_attention\n",
    "            decoder_output, decoder_hidden, decoder_attention = decoder(\n",
    "                decoder_input, decoder_hidden, encoder_outputs) # encoder_outputs (10,255)\n",
    "            # 因为使用了teacher_forcing, 无论解码器输出的decoder_output是什么, 我们都只\n",
    "            # 使用‘正确的答案’，即target_tensor[di]来计算损失\n",
    "            loss += criterion(decoder_output, target_tensor[di]) # (1,2233) (23)\n",
    "            # 并强制将下一次的解码器输入设置为‘正确的答案’\n",
    "            decoder_input = target_tensor[di]  \n",
    "\n",
    "    else:\n",
    "        # 如果不使用teacher_forcing\n",
    "        # 仍然遍历目标张量索引\n",
    "        for di in range(target_length):\n",
    "            # 将decoder_input, decoder_hidden, encoder_outputs传入解码器对象\n",
    "            # 获得decoder_output, decoder_hidden, decoder_attention\n",
    "            decoder_output, decoder_hidden, decoder_attention = decoder(\n",
    "                decoder_input, decoder_hidden, encoder_outputs)\n",
    "            # 只不过这里我们将从decoder_output取出答案\n",
    "            topv, topi = decoder_output.topk(1)\n",
    "            # 损失计算仍然使用decoder_output和target_tensor[di]\n",
    "            loss += criterion(decoder_output, target_tensor[di])\n",
    "            # 最后如果输出值是终止符，则循环停止\n",
    "            if topi.squeeze().item() == EOS_token:\n",
    "                break\n",
    "            # 否则，并对topi降维并分离赋值给decoder_input以便进行下次运算\n",
    "            # 这里的detach的分离作用使得这个decoder_input与模型构建的张量图无关，相当于全新的外界输入\n",
    "            decoder_input = topi.squeeze().detach()\n",
    "\n",
    "\n",
    "    # 误差进行反向传播\n",
    "    loss.backward()\n",
    "    # 编码器和解码器进行优化即参数更新\n",
    "    encoder_optimizer.step()\n",
    "    decoder_optimizer.step()\n",
    "\n",
    "    # 最后返回平均损失\n",
    "    return loss.item() / target_length\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8aa7b6a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['i m .', 'j ai ans .'],\n",
       " ['i m ok .', 'je vais bien .'],\n",
       " ['i m ok .', 'ca va .'],\n",
       " ['i m fat .', 'je suis gras .'],\n",
       " ['i m fat .', 'je suis gros .'],\n",
       " ['i m fit .', 'je suis en forme .'],\n",
       " ['i m hit !', 'je suis touche !'],\n",
       " ['i m hit !', 'je suis touchee !'],\n",
       " ['i m ill .', 'je suis malade .'],\n",
       " ['i m sad .', 'je suis triste .'],\n",
       " ['i m shy .', 'je suis timide .'],\n",
       " ['i m wet .', 'je suis mouille .'],\n",
       " ['i m wet .', 'je suis mouillee .'],\n",
       " ['he s wet .', 'il est mouille .'],\n",
       " ['i am fat .', 'je suis gras .'],\n",
       " ['i m back .', 'je suis revenu .'],\n",
       " ['i m back .', 'me revoila .'],\n",
       " ['i m bald .', 'je suis chauve .'],\n",
       " ['i m busy .', 'je suis occupe .'],\n",
       " ['i m busy .', 'je suis occupee .'],\n",
       " ['i m calm .', 'je suis calme .'],\n",
       " ['i m cold .', 'j ai froid .'],\n",
       " ['i m done .', 'j en ai fini .'],\n",
       " ['i m fine .', 'tout va bien .'],\n",
       " ['i m fine .', 'je vais bien .'],\n",
       " ['i m fine .', 'ca va .'],\n",
       " ['i m free !', 'je suis libre !'],\n",
       " ['i m free .', 'je suis libre .'],\n",
       " ['i m free .', 'je suis disponible .'],\n",
       " ['i m full .', 'je suis repu !'],\n",
       " ['i m full .', 'je suis rassasie !'],\n",
       " ['i m glad .', 'je suis content .'],\n",
       " ['i m home .', 'je suis chez moi .'],\n",
       " ['i m late .', 'je suis en retard .'],\n",
       " ['i m lazy .', 'je suis paresseux .'],\n",
       " ['i m lazy .', 'je suis faineant .'],\n",
       " ['i m lazy .', 'je suis paresseuse .'],\n",
       " ['i m lazy .', 'je suis faineante .'],\n",
       " ['i m okay .', 'je vais bien .'],\n",
       " ['i m okay .', 'je me porte bien .'],\n",
       " ['i m safe .', 'je suis en securite .'],\n",
       " ['i m sick .', 'je suis malade .'],\n",
       " ['i m sure .', 'j en suis certain .'],\n",
       " ['i m sure .', 'je suis certain .'],\n",
       " ['i m sure .', 'j en suis sur .'],\n",
       " ['i m sure .', 'j en suis sure .'],\n",
       " ['i m tall .', 'je suis grande .'],\n",
       " ['i m thin .', 'je suis mince .'],\n",
       " ['i m tidy .', 'je suis ordonne .'],\n",
       " ['i m tidy .', 'je suis ordonnee .'],\n",
       " ['i m ugly .', 'je suis laid .'],\n",
       " ['i m ugly .', 'je suis laide .'],\n",
       " ['i m weak .', 'je suis faible .'],\n",
       " ['i m well .', 'je vais bien .'],\n",
       " ['i m well .', 'je me porte bien .'],\n",
       " ['he is ill .', 'il est malade .'],\n",
       " ['he is old .', 'il est vieux .'],\n",
       " ['he s a dj .', 'il est dj .'],\n",
       " ['he s good .', 'il est bon .'],\n",
       " ['he s lazy .', 'il est paresseux .'],\n",
       " ['he s rich .', 'il est riche .'],\n",
       " ['i am busy .', 'je suis occupe .'],\n",
       " ['i am calm .', 'je suis calme .'],\n",
       " ['i am cold .', 'j ai froid .'],\n",
       " ['i am good .', 'je suis bon .'],\n",
       " ['i am here .', 'je suis ici .'],\n",
       " ['i am lazy .', 'je suis paresseux .'],\n",
       " ['i am lazy .', 'je suis faineant .'],\n",
       " ['i am lazy .', 'je suis paresseuse .'],\n",
       " ['i am lazy .', 'je suis faineante .'],\n",
       " ['i am okay .', 'je vais bien .'],\n",
       " ['i am sick .', 'je suis malade .'],\n",
       " ['i am sure .', 'je suis sur .'],\n",
       " ['i am sure .', 'je suis certain .'],\n",
       " ['i am weak .', 'je suis faible .'],\n",
       " ['i m a cop .', 'je suis flic .'],\n",
       " ['i m a man .', 'je suis un homme .'],\n",
       " ['i m alone .', 'je suis seule .'],\n",
       " ['i m alone .', 'je suis seul .'],\n",
       " ['i m armed .', 'je suis arme .'],\n",
       " ['i m armed .', 'je suis armee .'],\n",
       " ['i m awake .', 'je suis reveille .'],\n",
       " ['i m blind .', 'je suis aveugle .'],\n",
       " ['i m broke .', 'je suis fauche .'],\n",
       " ['i m crazy .', 'je suis fou .'],\n",
       " ['i m crazy .', 'je suis folle .'],\n",
       " ['i m cured .', 'je suis gueri .'],\n",
       " ['i m cured .', 'je suis guerie .'],\n",
       " ['i m drunk .', 'je suis saoul .'],\n",
       " ['i m drunk .', 'je suis soul .'],\n",
       " ['i m drunk .', 'je suis ivre .'],\n",
       " ['i m dying .', 'je me meurs .'],\n",
       " ['i m early .', 'je suis en avance .'],\n",
       " ['i m first .', 'je suis en premier .'],\n",
       " ['i m fussy .', 'je suis difficile .'],\n",
       " ['i m fussy .', 'je suis tatillon .'],\n",
       " ['i m fussy .', 'je suis tatillonne .'],\n",
       " ['i m going .', 'je pars maintenant .'],\n",
       " ['i m going .', 'je me tire .'],\n",
       " ['i m going .', 'j y vais .'],\n",
       " ['i m going .', 'je pars .'],\n",
       " ['i m loyal .', 'je suis loyal .'],\n",
       " ['i m loyal .', 'je suis loyale .'],\n",
       " ['i m lucky .', 'je suis veinard .'],\n",
       " ['i m lucky .', 'je suis veinarde .'],\n",
       " ['i m lucky .', 'j ai du pot .'],\n",
       " ['i m lucky .', 'je suis chanceux .'],\n",
       " ['i m lucky .', 'je suis chanceuse .'],\n",
       " ['i m lying .', 'je suis en train de mentir .'],\n",
       " ['i m quiet .', 'je suis tranquille .'],\n",
       " ['i m ready !', 'je suis prete !'],\n",
       " ['i m ready !', 'je suis pret !'],\n",
       " ['i m ready .', 'je suis pret .'],\n",
       " ['i m right .', 'j ai raison .'],\n",
       " ['i m sober .', 'je suis sobre .'],\n",
       " ['i m sorry .', 'excuse moi .'],\n",
       " ['i m sorry .', 'desole .'],\n",
       " ['i m sorry .', 'desole !'],\n",
       " ['i m sorry .', 'je suis desole .'],\n",
       " ['i m sorry .', 'je suis desolee .'],\n",
       " ['i m stuck .', 'je suis coincee .'],\n",
       " ['i m timid .', 'je suis timide .'],\n",
       " ['i m tired .', 'je suis fatigue !'],\n",
       " ['i m tough .', 'je suis dur .'],\n",
       " ['i m tough .', 'je suis dure .'],\n",
       " ['i m tough .', 'je suis dur a cuire .'],\n",
       " ['i m tough .', 'je suis dure a cuire .'],\n",
       " ['i m yours .', 'je suis a toi .'],\n",
       " ['i m yours .', 'je suis a vous .'],\n",
       " ['she s hot .', 'elle est chaude .'],\n",
       " ['she s hot .', 'elle est tres attirante .'],\n",
       " ['we re hot .', 'nous avons chaud .'],\n",
       " ['we re sad .', 'nous sommes tristes .'],\n",
       " ['we re shy .', 'nous sommes timides .'],\n",
       " ['he is a dj .', 'il est dj .'],\n",
       " ['he is busy .', 'il a a faire .'],\n",
       " ['he is here !', 'il est ici !'],\n",
       " ['he is kind .', 'il est gentil .'],\n",
       " ['he is late .', 'il est en retard .'],\n",
       " ['he is lazy .', 'il est faineant .'],\n",
       " ['he is lazy .', 'il est paresseux .'],\n",
       " ['he is poor .', 'il est pauvre .'],\n",
       " ['he is sick .', 'il est malade .'],\n",
       " ['he s swiss .', 'il est suisse .'],\n",
       " ['he s swiss .', 'il est helvete .'],\n",
       " ['he s broke .', 'il est ruine .'],\n",
       " ['he s broke .', 'il est fauche .'],\n",
       " ['he s drunk .', 'il est ivre .'],\n",
       " ['he s drunk .', 'il est soul .'],\n",
       " ['he s smart .', 'il est intelligent .'],\n",
       " ['i am a man .', 'je suis un homme .'],\n",
       " ['i am human .', 'je suis humain .'],\n",
       " ['i am ready .', 'je suis pret .'],\n",
       " ['i am right .', 'j ai raison .'],\n",
       " ['i am sorry .', 'je suis desole .'],\n",
       " ['i am sorry .', 'je suis desolee .'],\n",
       " ['i am tired .', 'je suis fatigue !'],\n",
       " ['i am tired .', 'je suis creve .'],\n",
       " ['i m french .', 'je suis francais .'],\n",
       " ['i m korean .', 'je suis coreen .'],\n",
       " ['i m a hero .', 'je suis un heros .'],\n",
       " ['i m a liar .', 'je suis un menteur .'],\n",
       " ['i m baking !', 'je cuis !'],\n",
       " ['i m better .', 'je vais mieux .'],\n",
       " ['i m buying .', 'je paie .'],\n",
       " ['i m buying .', 'c est moi qui paie .'],\n",
       " ['i m chubby .', 'je suis grassouillet .'],\n",
       " ['i m chubby .', 'je suis grassouillette .'],\n",
       " ['i m eating .', 'je mange .'],\n",
       " ['i m famous .', 'je suis connu .'],\n",
       " ['i m famous .', 'je suis connue .'],\n",
       " ['i m faster .', 'je suis plus rapide .'],\n",
       " ['i m flabby .', 'je suis flasque .'],\n",
       " ['i m greedy .', 'je suis cupide .'],\n",
       " ['i m greedy .', 'je suis gourmand .'],\n",
       " ['i m greedy .', 'je suis gourmande .'],\n",
       " ['i m hiding .', 'je me cache .'],\n",
       " ['i m honest .', 'je suis honnete .'],\n",
       " ['i m humble .', 'je suis humble .'],\n",
       " ['i m hungry !', 'j ai faim !'],\n",
       " ['i m hungry .', 'j ai faim !'],\n",
       " ['i m immune .', 'je suis immunise .'],\n",
       " ['i m immune .', 'je suis immunisee .'],\n",
       " ['i m in bed .', 'je suis au lit .'],\n",
       " ['i m in bed .', 'je suis alite .'],\n",
       " ['i m in bed .', 'je suis alitee .'],\n",
       " ['i m joking .', 'je rigole !'],\n",
       " ['i m loaded .', 'je suis saoul .'],\n",
       " ['i m lonely .', 'je me sens seul .'],\n",
       " ['i m lonely .', 'je me sens seule .'],\n",
       " ['i m losing .', 'je suis en train de perdre .'],\n",
       " ['i m moving .', 'je suis en train de demenager .'],\n",
       " ['i m normal .', 'je suis normal .'],\n",
       " ['i m normal .', 'je suis normale .'],\n",
       " ['i m paying .', 'c est moi qui paie .'],\n",
       " ['i m paying .', 'je suis en train de payer .'],\n",
       " ['i m pooped .', 'je suis creve .'],\n",
       " ['i m rested .', 'je suis repose .'],\n",
       " ['i m rested .', 'je suis reposee .'],\n",
       " ['i m ruined .', 'je suis ruine .'],\n",
       " ['i m ruined .', 'je suis ruinee .'],\n",
       " ['i m shaken .', 'je suis remue .'],\n",
       " ['i m shaken .', 'je suis remuee .'],\n",
       " ['i m single .', 'je suis celibataire .'],\n",
       " ['i m skinny .', 'je suis maigrichon .'],\n",
       " ['i m skinny .', 'je suis maigrichonne .'],\n",
       " ['i m sleepy !', 'je suis fatigue !'],\n",
       " ['i m sleepy !', 'j ai sommeil !'],\n",
       " ['i m sneaky .', 'je suis sournois .'],\n",
       " ['i m sneaky .', 'je suis sournoise .'],\n",
       " ['i m strict .', 'je suis strict .'],\n",
       " ['i m strict .', 'je suis stricte .'],\n",
       " ['i m strong .', 'je suis fort .'],\n",
       " ['i m strong .', 'je suis forte .'],\n",
       " ['i m thirty .', 'j ai trente ans .'],\n",
       " ['i m wasted .', 'je suis affaiblie .'],\n",
       " ['she is old .', 'elle est vieille .'],\n",
       " ['she s busy .', 'elle est occupee .'],\n",
       " ['she s nice .', 'elle est gentille .'],\n",
       " ['we are men .', 'nous sommes des hommes .'],\n",
       " ['we re back .', 'nous sommes de retour .'],\n",
       " ['we re busy .', 'nous sommes occupes .'],\n",
       " ['we re busy .', 'nous sommes occupees .'],\n",
       " ['we re done .', 'nous avons fini .'],\n",
       " ['we re done .', 'nous avons termine .'],\n",
       " ['we re done .', 'nous en avons fini .'],\n",
       " ['we re done .', 'nous en avons termine .'],\n",
       " ['we re even .', 'nous sommes quittes .'],\n",
       " ['we re fine .', 'nous allons bien .'],\n",
       " ['we re here .', 'nous sommes ici .'],\n",
       " ['we re here .', 'nous sommes la .'],\n",
       " ['we re home .', 'nous sommes chez nous .'],\n",
       " ['we re late .', 'nous sommes en retard .'],\n",
       " ['we re lost .', 'nous sommes perdus .'],\n",
       " ['we re lost .', 'nous sommes perdues .'],\n",
       " ['we re rich .', 'nous sommes riches .'],\n",
       " ['we re safe .', 'nous sommes en securite .'],\n",
       " ['we re sunk .', 'on est foutu .'],\n",
       " ['we re sunk .', 'nous sommes foutus .'],\n",
       " ['we re weak .', 'nous sommes faibles .'],\n",
       " ['you re bad .', 'tu es vilain .'],\n",
       " ['you re big .', 'tu es grand .'],\n",
       " ['you re big .', 'tu es grande .'],\n",
       " ['you re big .', 'vous etes grand .'],\n",
       " ['you re big .', 'vous etes grande .'],\n",
       " ['you re big .', 'vous etes grands .'],\n",
       " ['you re big .', 'vous etes grandes .'],\n",
       " ['you re fun .', 't es marrante .'],\n",
       " ['you re fun .', 't es marrant .'],\n",
       " ['you re old .', 'tu es vieux .'],\n",
       " ['you re old .', 'tu es vieille .'],\n",
       " ['you re old .', 'vous etes vieux .'],\n",
       " ['you re old .', 'vous etes vieilles .'],\n",
       " ['you re old .', 'vous etes vieille .'],\n",
       " ['you re sad .', 'tu es triste .'],\n",
       " ['you re sad .', 'vous etes triste .'],\n",
       " ['you re shy .', 'tu es timide .'],\n",
       " ['you re shy .', 'vous etes timide .'],\n",
       " ['he is drunk .', 'il est ivre .'],\n",
       " ['he is drunk .', 'il est soul .'],\n",
       " ['he is eight .', 'il a huit ans .'],\n",
       " ['he is hated .', 'il est hai .'],\n",
       " ['he is nasty .', 'il est mechant .'],\n",
       " ['he is smart .', 'il est intelligent .'],\n",
       " ['he is young .', 'il est jeune .'],\n",
       " ['he s a hunk .', 'c est un beau mec .'],\n",
       " ['he s a hunk .', 'c est un beau gosse .'],\n",
       " ['he s a jerk .', 'c est un pauvre type .'],\n",
       " ['he s a liar .', 'c est un menteur .'],\n",
       " ['he s a nerd .', 'c est un binoclard .'],\n",
       " ['he s a slob .', 'c est un flemmard .'],\n",
       " ['he s asleep .', 'il est endormi .'],\n",
       " ['he s coming .', 'il arrive .'],\n",
       " ['he s coming .', 'il est en train d arriver .'],\n",
       " ['he s crying .', 'il est en train de pleurer .'],\n",
       " ['he s faking .', 'il simule .'],\n",
       " ['he s loaded .', 'il est blinde .'],\n",
       " ['he s loaded .', 'il est pete de thune .'],\n",
       " ['he s loaded .', 'il est plein aux as .'],\n",
       " ['he s my age .', 'il a mon age .'],\n",
       " ['he s not in .', 'il n est pas chez lui .'],\n",
       " ['he s not in .', 'il n est pas a l interieur .'],\n",
       " ['he s not in .', 'il n est pas la .'],\n",
       " ['i am french .', 'je suis francais .'],\n",
       " ['i am korean .', 'je suis coreen .'],\n",
       " ['i am a cook .', 'je suis cuisinier .'],\n",
       " ['i am a monk .', 'je suis un moine .'],\n",
       " ['i am better .', 'je vais mieux .'],\n",
       " ['i am better .', 'je suis mieux .'],\n",
       " ['i am coming .', 'j arrive .'],\n",
       " ['i am hungry .', 'j ai faim !'],\n",
       " ['i am joking .', 'je plaisante .'],\n",
       " ['i am single .', 'je suis celibataire .'],\n",
       " ['i am taller .', 'je suis plus grand .'],\n",
       " ['i m too .', 'j ai egalement dix sept ans .'],\n",
       " ['i m finnish .', 'je suis finlandais .'],\n",
       " ['i m finnish .', 'je suis finlandaise .'],\n",
       " ['i m italian .', 'je suis italien .'],\n",
       " ['i m a baker .', 'je suis boulanger .'],\n",
       " ['i m a baker .', 'je suis boulangere .'],\n",
       " ['i m all set .', 'je suis tout a fait pret .'],\n",
       " ['i m all set .', 'je suis tout a fait prete .'],\n",
       " ['i m ashamed .', 'j ai honte .'],\n",
       " ['i m at home .', 'je suis a la maison .'],\n",
       " ['i m at home .', 'je suis dans la maison .'],\n",
       " ['i m baffled .', 'je suis perplexe .'],\n",
       " ['i m blessed .', 'je suis beni .'],\n",
       " ['i m blessed .', 'je suis benie .'],\n",
       " ['i m careful .', 'je suis prudent .'],\n",
       " ['i m careful .', 'je suis prudente .'],\n",
       " ['i m certain .', 'je suis sur .'],\n",
       " ['i m certain .', 'je suis certain .'],\n",
       " ['i m chicken .', 'j ai les foies .'],\n",
       " ['i m chicken .', 'j ai les chocottes .'],\n",
       " ['i m correct .', 'j ai raison .'],\n",
       " ['i m curious .', 'je suis curieux .'],\n",
       " ['i m curious .', 'je suis curieuse .'],\n",
       " ['i m dancing .', 'je suis en train de danser .'],\n",
       " ['i m dieting .', 'je suis au regime .'],\n",
       " ['i m driving .', 'je suis en train de conduire .'],\n",
       " ['i m driving .', 'je conduis .'],\n",
       " ['i m engaged .', 'je suis fiance .'],\n",
       " ['i m engaged .', 'je suis fiancee .'],\n",
       " ['i m excited .', 'je suis excite .'],\n",
       " ['i m excited .', 'je suis excitee .'],\n",
       " ['i m fasting .', 'je fais la diete .'],\n",
       " ['i m fasting .', 'je suis a la diete .'],\n",
       " ['i m finicky .', 'je suis meticuleux .'],\n",
       " ['i m finicky .', 'je suis meticuleuse .'],\n",
       " ['i m frantic .', 'je suis affole .'],\n",
       " ['i m frantic .', 'je suis affolee .'],\n",
       " ['i m furious .', 'je suis furieux .'],\n",
       " ['i m healthy .', 'je suis en bonne sante .'],\n",
       " ['i m humming .', 'je fredonne .'],\n",
       " ['i m in luck .', 'je suis veinard .'],\n",
       " ['i m in luck .', 'je suis veinarde .'],\n",
       " ['i m jealous .', 'je suis jalouse .'],\n",
       " ['i m jittery .', 'j ai la frousse .'],\n",
       " ['i m kidding .', 'je plaisante .'],\n",
       " ['i m kidding .', 'je rigole !'],\n",
       " ['i m leaving .', 'je pars .'],\n",
       " ['i m married .', 'je suis marie .'],\n",
       " ['i m married .', 'je suis mariee .'],\n",
       " ['i m no fool .', 'je ne suis pas une idiote .'],\n",
       " ['i m no hero .', 'je ne suis pas un heros .'],\n",
       " ['i m no liar .', 'je ne suis pas un menteur .'],\n",
       " ['i m not fat .', 'je ne suis pas gros .'],\n",
       " ['i m not mad .', 'je ne suis pas fou .'],\n",
       " ['i m not mad .', 'je ne suis pas folle .'],\n",
       " ['i m not old .', 'je ne suis pas vieux .'],\n",
       " ['i m not old .', 'je ne suis pas vieille .'],\n",
       " ['i m not sad .', 'je ne suis pas triste .'],\n",
       " ['i m not shy .', 'je ne suis pas timide .'],\n",
       " ['i m on duty .', 'je suis en service .'],\n",
       " ['i m patient .', 'je suis patiente .'],\n",
       " ['i m patient .', 'je suis patient .'],\n",
       " ['i m popular .', 'je suis populaire .'],\n",
       " ['i m psyched .', 'je suis remonte .'],\n",
       " ['i m psychic .', 'je suis voyant .'],\n",
       " ['i m psychic .', 'je suis voyante .'],\n",
       " ['i m puzzled .', 'je suis perplexe .'],\n",
       " ['i m reading .', 'je lis .'],\n",
       " ['i m relaxed .', 'je suis detendu .'],\n",
       " ['i m relaxed .', 'je suis detendue .'],\n",
       " ['i m retired .', 'je suis retraite .'],\n",
       " ['i m retired .', 'je suis retraitee .'],\n",
       " ['i m retired .', 'je suis pensionne .'],\n",
       " ['i m retired .', 'je suis pensionnee .'],\n",
       " ['i m selfish .', 'je suis egoiste .'],\n",
       " ['i m serious .', 'je suis serieux .'],\n",
       " ['i m shocked .', 'je suis choque .'],\n",
       " ['i m shocked .', 'je suis choquee .'],\n",
       " ['i m sincere .', 'je suis sincere .'],\n",
       " ['i m sloshed .', 'je suis bourre .'],\n",
       " ['i m sloshed .', 'je suis bourree .'],\n",
       " ['i m so full .', 'je suis tellement rassasie .'],\n",
       " ['i m starved .', 'je meurs de faim !'],\n",
       " ['i m starved .', 'j ai l estomac dans les talons .'],\n",
       " ['i m starved .', 'j ai la dalle .'],\n",
       " ['i m starved .', 'j ai les crocs .'],\n",
       " ['i m staying .', 'je reste .'],\n",
       " ['i m stuffed .', 'je suis gave .'],\n",
       " ['i m stuffed .', 'je suis gavee .'],\n",
       " ['i m stunned .', 'je suis sidere .'],\n",
       " ['i m stunned .', 'je suis sideree .'],\n",
       " ['i m talking .', 'je suis en train de discuter .'],\n",
       " ['i m teasing .', 'je taquine .'],\n",
       " ['i m thirsty .', 'j ai soif .'],\n",
       " ['i m through .', 'j en ai fini .'],\n",
       " ['i m through .', 'j en ai termine .'],\n",
       " ['i m too fat .', 'je suis trop gros .'],\n",
       " ['i m touched .', 'je suis touche .'],\n",
       " ['i m touched .', 'je suis touchee .'],\n",
       " ['i m unhappy .', 'je suis mecontent .'],\n",
       " ['i m unhappy .', 'je suis mecontente .'],\n",
       " ['i m unlucky .', 'j ai la schcoumoune .'],\n",
       " ['i m wealthy .', 'je suis fortune .'],\n",
       " ['i m wealthy .', 'je suis fortunee .'],\n",
       " ['i m winning .', 'je gagne .'],\n",
       " ['i m winning .', 'je l emporte .'],\n",
       " ['i m working .', 'je suis en train de travailler .'],\n",
       " ['i m worried .', 'je me fais du souci .'],\n",
       " ['she is curt .', 'elle n a pas de charme .'],\n",
       " ['she is dead .', 'elle est morte .'],\n",
       " ['she is kind .', 'elle est gentille .'],\n",
       " ['she is late .', 'elle est en retard .'],\n",
       " ['she s a dog .', 'c est une enfoiree .'],\n",
       " ['she s a fox .', 'c est un renard .'],\n",
       " ['they re bad .', 'ils sont mauvais .'],\n",
       " ['they re bad .', 'elles sont mauvaises .'],\n",
       " ['they re old .', 'ils sont vieux .'],\n",
       " ['they re old .', 'elles sont vieilles .'],\n",
       " ['we are even .', 'nous sommes quittes .'],\n",
       " ['we are even .', 'nous sommes a egalite .'],\n",
       " ['we are here .', 'nous sommes ici .'],\n",
       " ['we are here .', 'nous y sommes .'],\n",
       " ['we are late .', 'nous sommes en retard .'],\n",
       " ['we re alone .', 'nous sommes seuls .'],\n",
       " ['we re alone .', 'nous sommes seules .'],\n",
       " ['we re angry .', 'nous sommes en colere .'],\n",
       " ['we re armed .', 'nous sommes armes .'],\n",
       " ['we re armed .', 'nous sommes armees .'],\n",
       " ['we re bored .', 'nous nous ennuyons .'],\n",
       " ['we re bored .', 'on s emmerde .'],\n",
       " ['we re broke .', 'nous sommes fauches .'],\n",
       " ['we re broke .', 'nous sommes fauchees .'],\n",
       " ['we re broke .', 'on est fauches .'],\n",
       " ['we re dying .', 'nous sommes en train de mourir .'],\n",
       " ['we re early .', 'nous sommes en avance .'],\n",
       " ['we re going .', 'nous y allons .'],\n",
       " ['we re happy .', 'nous sommes heureux .'],\n",
       " ['we re ready .', 'nous sommes pretes .'],\n",
       " ['we re saved .', 'nous sommes sauves .'],\n",
       " ['we re saved .', 'nous sommes sauvees .'],\n",
       " ['we re smart .', 'nous sommes intelligents .'],\n",
       " ['we re smart .', 'nous sommes intelligentes .'],\n",
       " ['we re sorry .', 'nous sommes desoles .'],\n",
       " ['we re sorry .', 'nous sommes desolees .'],\n",
       " ['we re stuck .', 'nous sommes coinces .'],\n",
       " ['we re stuck .', 'nous sommes coincees .'],\n",
       " ['we re tired .', 'nous sommes fatigues .'],\n",
       " ['we re tired .', 'nous sommes fatiguees .'],\n",
       " ['we re twins .', 'nous sommes jumeaux .'],\n",
       " ['we re twins .', 'nous sommes jumelles .'],\n",
       " ['you are big .', 'tu es grand .'],\n",
       " ['you are big .', 'tu es grande .'],\n",
       " ['you are big .', 'vous etes grand .'],\n",
       " ['you are big .', 'vous etes grande .'],\n",
       " ['you are big .', 'vous etes grands .'],\n",
       " ['you are big .', 'vous etes grandes .'],\n",
       " ['you are mad .', 'tu es fou .'],\n",
       " ['you re back .', 'tu es de retour .'],\n",
       " ['you re back .', 'vous etes de retour .'],\n",
       " ['you re cool .', 't es sympa .'],\n",
       " ['you re cool .', 't es decontracte .'],\n",
       " ['you re fair .', 'tu es juste .'],\n",
       " ['you re fair .', 'vous etes juste .'],\n",
       " ['you re fair .', 'vous etes justes .'],\n",
       " ['you re fine .', 'tu vas bien .'],\n",
       " ['you re free .', 'tu es libre .'],\n",
       " ['you re free .', 'vous etes libres .'],\n",
       " ['you re free .', 'vous etes libre .'],\n",
       " ['you re good .', 'vous etes bon .'],\n",
       " ['you re good .', 'vous etes bonne .'],\n",
       " ['you re good .', 'vous etes bons .'],\n",
       " ['you re good .', 'vous etes bonnes .'],\n",
       " ['you re good .', 'tu es bon .'],\n",
       " ['you re good .', 'tu es bonne .'],\n",
       " ['you re good .', 't es bon .'],\n",
       " ['you re good .', 't es bonne .'],\n",
       " ['you re kind .', 'tu es gentil .'],\n",
       " ['you re kind .', 'tu es gentille .'],\n",
       " ['you re lazy .', 'tu es paresseux .'],\n",
       " ['you re lazy .', 'tu es paresseuse .'],\n",
       " ['you re lazy .', 'vous etes paresseux .'],\n",
       " ['you re lazy .', 'vous etes paresseuses .'],\n",
       " ['you re lazy .', 'vous etes paresseuse .'],\n",
       " ['you re lost .', 'tu es perdu .'],\n",
       " ['you re lost .', 'tu es perdue .'],\n",
       " ['you re nice .', 't es sympa .'],\n",
       " ['you re nice .', 'vous etes sympa .'],\n",
       " ['you re nice .', 'vous etes sympas .'],\n",
       " ['you re nuts !', 'tu es fou !'],\n",
       " ['you re nuts !', 't es dingue !'],\n",
       " ['you re nuts !', 'vous etes dingue !'],\n",
       " ['you re nuts !', 'vous etes dingues !'],\n",
       " ['you re nuts !', 't es givre !'],\n",
       " ['you re nuts !', 't es givree !'],\n",
       " ['you re nuts !', 'vous etes givre !'],\n",
       " ['you re nuts !', 'vous etes givree !'],\n",
       " ['you re nuts !', 'vous etes givres !'],\n",
       " ['you re nuts !', 'vous etes givrees !'],\n",
       " ['you re rich .', 'tu es riche .'],\n",
       " ['you re rich .', 'vous etes riche .'],\n",
       " ['you re rich .', 'vous etes riches .'],\n",
       " ['you re rude .', 'tu es grossier .'],\n",
       " ['you re rude .', 'vous etes grossiers .'],\n",
       " ['you re rude .', 'vous etes grossiere .'],\n",
       " ['you re rude .', 'vous etes grossieres .'],\n",
       " ['you re rude .', 'tu es grossiere .'],\n",
       " ['you re safe .', 'tu es en securite .'],\n",
       " ['you re safe .', 'vous etes en securite .'],\n",
       " ['you re safe .', 'tu es sauf .'],\n",
       " ['you re safe .', 'vous etes saufs .'],\n",
       " ['you re safe .', 'vous etes sauf .'],\n",
       " ['you re safe .', 'vous etes sauve .'],\n",
       " ['you re safe .', 'vous etes sauves .'],\n",
       " ['you re safe .', 'tu es sauve .'],\n",
       " ['you re sick !', 'vous etes malade !'],\n",
       " ['you re sick !', 'tu es malade !'],\n",
       " ['you re sick !', 'vous etes malade !'],\n",
       " ['you re thin .', 'tu es mince .'],\n",
       " ['you re thin .', 'vous etes mince .'],\n",
       " ['you re thin .', 'vous etes minces .'],\n",
       " ['you re weak .', 'tu es faible .'],\n",
       " ['you re weak .', 'vous etes faible .'],\n",
       " ['you re weak .', 'vous etes faibles .'],\n",
       " ['he is a poet .', 'c est un poete .'],\n",
       " ['he is a poet .', 'il est poete .'],\n",
       " ['he is asleep .', 'il est endormi .'],\n",
       " ['he is cranky .', 'il est excentrique .'],\n",
       " ['he is eating .', 'il est en train de manger .'],\n",
       " ['he is heroic .', 'il est heroique .'],\n",
       " ['he is not in .', 'il n est pas chez lui .'],\n",
       " ['he is not in .', 'il n est pas a l interieur .'],\n",
       " ['he s english .', 'il est anglais .'],\n",
       " ['he s a bigot .', 'c est un bigot .'],\n",
       " ['he s a bigot .', 'c est un sectaire .'],\n",
       " ['he s a bigot .', 'c est un fanatique .'],\n",
       " ['he s a bigot .', 'c est un illumine .'],\n",
       " ['he s in pain .', 'il souffre .'],\n",
       " ['he s married .', 'il est marie .'],\n",
       " ['he s my hero .', 'c est mon heros .'],\n",
       " ['he s out now .', 'il est actuellement a l exterieur .'],\n",
       " ['he s so cute .', 'il est si mignon !'],\n",
       " ['he s so cute .', 'il est tellement mignon !'],\n",
       " ['i am italian .', 'je suis italien .'],\n",
       " ['i am ashamed .', 'j ai honte .'],\n",
       " ['i am at home .', 'je suis a la maison .'],\n",
       " ['i am curious .', 'je suis curieux .'],\n",
       " ['i am married .', 'je suis mariee .'],\n",
       " ['i am so sick .', 'je suis tellement malade .'],\n",
       " ['i am so sick .', 'je suis si malade .'],\n",
       " ['i am so sick .', 'c est moi qui suis tellement malade .'],\n",
       " ['i am so sick .', 'c est moi qui suis si malade .'],\n",
       " ['i am thirsty .', 'j ai soif .'],\n",
       " ['i am working .', 'je suis en train de travailler .'],\n",
       " ['i m a coward .', 'je suis un couard .'],\n",
       " ['i m a coward .', 'je suis un lache .'],\n",
       " ['i m a doctor .', 'je suis medecin .'],\n",
       " ['i m a doctor .', 'je suis toubib .'],\n",
       " ['i m a farmer .', 'je suis fermier .'],\n",
       " ['i m a farmer .', 'je suis agriculteur .'],\n",
       " ['i m a farmer .', 'je travaille dans ma ferme .'],\n",
       " ['i m a farmer .', 'je suis un agriculteur .'],\n",
       " ['i m a purist .', 'je suis un puriste .'],\n",
       " ['i m addicted .', 'je suis drogue .'],\n",
       " ['i m addicted .', 'je suis accro .'],\n",
       " ['i m addicted .', 'j ai une assuetude .'],\n",
       " ['i m all done .', 'j ai tout fini .'],\n",
       " ['i m all done .', 'j ai tout termine .'],\n",
       " ['i m all ears .', 'je suis tout ouie .'],\n",
       " ['i m an adult .', 'je suis adulte .'],\n",
       " ['i m an agent .', 'je suis un agent .'],\n",
       " ['i m bleeding .', 'je suis en train de saigner .'],\n",
       " ['i m confused .', 'je me melange les pinceaux .'],\n",
       " ['i m creative .', 'je suis creatif .'],\n",
       " ['i m creative .', 'je suis creative .'],\n",
       " ['i m cultured .', 'je suis cultive .'],\n",
       " ['i m cultured .', 'je suis cultivee .'],\n",
       " ['i m divorced .', 'je suis divorce .'],\n",
       " ['i m divorced .', 'je suis divorcee .'],\n",
       " ['i m drowning .', 'je suis en train de me noyer .'],\n",
       " ['i m eighteen .', 'j ai dix huit ans .'],\n",
       " ['i m faithful .', 'je suis fidele .'],\n",
       " ['i m famished .', 'je suis affame !'],\n",
       " ['i m fearless .', 'je suis intrepide .'],\n",
       " ['i m fighting .', 'je me bats .'],\n",
       " ['i m finished .', 'j ai termine .'],\n",
       " ['i m finished .', 'j en ai termine .'],\n",
       " ['i m free now .', 'je suis libre maintenant .'],\n",
       " ['i m freezing .', 'je suis gele .'],\n",
       " ['i m grounded .', 'je suis cloue .'],\n",
       " ['i m grounded .', 'je suis clouee .'],\n",
       " ['i m gullible .', 'je suis credule .'],\n",
       " ['i m homesick .', 'j ai le mal du pays .'],\n",
       " ['i m hungover .', 'j ai la gueule de bois .'],\n",
       " ['i m in paris .', 'je suis a paris .'],\n",
       " ['i m innocent .', 'je suis innocent .'],\n",
       " ['i m innocent .', 'je suis innocente .'],\n",
       " ['i m innocent .', 'je suis ingenu .'],\n",
       " ['i m innocent .', 'je suis ingenue .'],\n",
       " ['i m involved .', 'je suis implique .'],\n",
       " ['i m involved .', 'je suis impliquee .'],\n",
       " ['i m managing .', 'je m en sors .'],\n",
       " ['i m new here .', 'je suis nouveau ici .'],\n",
       " ['i m no rebel .', 'je ne suis pas un rebelle .'],\n",
       " ['i m no saint .', 'je ne suis pas un saint .'],\n",
       " ['i m no saint .', 'je ne suis pas une sainte .'],\n",
       " ['i m not busy .', 'je ne suis pas occupe .'],\n",
       " ['i m not deaf .', 'je ne suis pas sourd .'],\n",
       " ['i m not deaf .', 'je ne suis pas sourde .'],\n",
       " ['i m not done .', 'je n ai pas fini .'],\n",
       " ['i m not done .', 'je n ai pas termine .'],\n",
       " ['i m not done .', 'je n en ai pas termine .'],\n",
       " ['i m not dumb .', 'je ne suis pas abruti .'],\n",
       " ['i m not dumb .', 'je ne suis pas abrutie .'],\n",
       " ['i m not evil .', 'je ne suis pas mauvais .'],\n",
       " ['i m not here .', 'je ne suis pas ici .'],\n",
       " ['i m not here .', 'je ne suis pas la .'],\n",
       " ['i m not home .', 'je ne suis pas chez moi .'],\n",
       " ['i m not home .', 'je ne suis pas a la maison .'],\n",
       " ['i m not hurt .', 'je ne suis pas blesse .'],\n",
       " ['i m not hurt .', 'je ne suis pas blessee .'],\n",
       " ['i m not mean .', 'je ne suis pas mechant .'],\n",
       " ['i m not mean .', 'je ne suis pas mechante .'],\n",
       " ['i m not rich .', 'je ne suis pas riche .'],\n",
       " ['i m not sure .', 'je n en suis pas certain .'],\n",
       " ['i m not sure .', 'je n en suis pas certaine .'],\n",
       " ['i m not tall .', 'je ne suis pas grand .'],\n",
       " ['i m not tall .', 'je ne suis pas grande .'],\n",
       " ['i m not ugly .', 'je ne suis pas laid .'],\n",
       " ['i m not ugly .', 'je ne suis pas laide .'],\n",
       " ['i m not well .', 'je ne vais pas bien .'],\n",
       " ['i m off duty .', 'je ne suis pas en service .'],\n",
       " ['i m offended .', 'je suis offense .'],\n",
       " ['i m offended .', 'je suis offensee .'],\n",
       " ['i m outraged .', 'je suis indigne .'],\n",
       " ['i m outraged .', 'je suis indignee .'],\n",
       " ['i m powerful .', 'je suis puissant .'],\n",
       " ['i m powerful .', 'je suis puissante .'],\n",
       " ['i m prepared .', 'je suis pret .'],\n",
       " ['i m prepared .', 'je suis preparee .'],\n",
       " ['i m prepared .', 'je suis prepare .'],\n",
       " ['i m punctual .', 'je suis ponctuel .'],\n",
       " ['i m punctual .', 'je suis ponctuelle .'],\n",
       " ['i m rational .', 'je suis rationnel .'],\n",
       " ['i m rational .', 'je suis rationnelle .'],\n",
       " ['i m reformed .', 'je me suis amende .'],\n",
       " ['i m reformed .', 'je me suis amendee .'],\n",
       " ['i m reliable .', 'je suis fiable .'],\n",
       " ['i m restless .', 'je ne tiens pas en place .'],\n",
       " ['i m ruthless .', 'je suis impitoyable .'],\n",
       " ['i m shooting .', 'je tire .'],\n",
       " ['i m sleeping .', 'je suis en train de dormir .'],\n",
       " ['i m so sorry .', 'je suis tellement desole !'],\n",
       " ['i m so sorry .', 'je suis tellement desolee !'],\n",
       " ['i m so tired !', 'je suis si fatigue !'],\n",
       " ['i m so tired !', 'je suis tellement las !'],\n",
       " ['i m speaking .', 'je suis en train de parler .'],\n",
       " ['i m starving !', 'je meurs de faim !'],\n",
       " ['i m starving .', 'je creve de faim !'],\n",
       " ['i m starving .', 'j ai la fringale .'],\n",
       " ['i m stubborn .', 'je suis tetu .'],\n",
       " ['i m stubborn .', 'je suis tetue .'],\n",
       " ['i m stubborn .', 'je suis obstine .'],\n",
       " ['i m stubborn .', 'je suis obstinee .'],\n",
       " ['i m the boss .', 'c est moi le patron .'],\n",
       " ['i m the boss .', 'c est moi la patronne .'],\n",
       " ['i m the boss .', 'je suis le patron .'],\n",
       " ['i m the boss .', 'je suis la patronne .'],\n",
       " ['i m thinking .', 'je reflechis .'],\n",
       " ['i m thorough .', 'je suis minutieux .'],\n",
       " ['i m thorough .', 'je suis minutieuse .'],\n",
       " ['i m thorough .', 'je suis consciencieux .'],\n",
       " ['i m thorough .', 'je suis consciencieuse .'],\n",
       " ['i m thrilled .', 'je suis ravi .'],\n",
       " ['i m thrilled .', 'je suis ravie .'],\n",
       " ['i m ticklish .', 'je suis chatouilleux .'],\n",
       " ['i m ticklish .', 'je suis chatouilleuse .'],\n",
       " ['i m too busy .', 'je suis trop occupe .'],\n",
       " ['i m too busy .', 'je suis trop occupee .'],\n",
       " ['i m too busy .', 'je suis trop affaire .'],\n",
       " ['i m too busy .', 'je suis trop affairee .'],\n",
       " ['i m truthful .', 'je dis la verite .'],\n",
       " ['i m unbiased .', 'je suis impartial .'],\n",
       " ['i m unbiased .', 'je suis impartiale .'],\n",
       " ['i m upstairs .', 'je suis au dessus .'],\n",
       " ['i m very fat .', 'je suis tres gros .'],\n",
       " ['i m very fat .', 'je suis tres gras .'],\n",
       " ['i m very sad .', 'je suis tres triste .'],\n",
       " ['i m very shy .', 'je suis tres timide .'],\n",
       " ['i m worn out .', 'je suis epuise .'],\n",
       " ['she is a fox .', 'c est un renard .'],\n",
       " ['she is lucky .', 'elle est chanceuse .'],\n",
       " ['she is lucky .', 'elle est chancarde .'],\n",
       " ['she is quiet .', 'elle est tranquille .'],\n",
       " ['she is sharp .', 'elle est tranchante .'],\n",
       " ['she is sharp .', 'elle est affutee .'],\n",
       " ['she is wrong .', 'elle a tort .'],\n",
       " ['she is young .', 'elle est jeune .'],\n",
       " ['they re back .', 'ils sont de retour .'],\n",
       " ['they re back .', 'elles sont de retour .'],\n",
       " ['they re boys .', 'ce sont des garcons .'],\n",
       " ['they re cold .', 'ils sont froids .'],\n",
       " ['they re cold .', 'elles sont froides .'],\n",
       " ['they re cool .', 'ils sont sympa .'],\n",
       " ['they re cool .', 'elles sont sympa .'],\n",
       " ['they re cops .', 'ce sont des flics .'],\n",
       " ['they re cute .', 'ils sont mignons .'],\n",
       " ['they re cute .', 'elles sont mignonnes .'],\n",
       " ['they re dead .', 'ils sont decedes .'],\n",
       " ['they re dead .', 'elles sont decedees .'],\n",
       " ['they re done .', 'ils ont termine .'],\n",
       " ['they re done .', 'elles ont termine .'],\n",
       " ['they re free .', 'ils sont libres .'],\n",
       " ['they re free .', 'elles sont libres .'],\n",
       " ['they re gone .', 'ils sont partis .'],\n",
       " ['they re gone .', 'elles sont parties .'],\n",
       " ['they re gone .', 'il n y en a plus .'],\n",
       " ['they re here .', 'ils sont la .'],\n",
       " ['they re mine .', 'ils sont a moi .'],\n",
       " ['they re mine .', 'ils sont miens .'],\n",
       " ['they re mine .', 'ce sont les miens .'],\n",
       " ['they re mine .', 'ce sont les miennes .'],\n",
       " ['they re mine .', 'elles sont miennes .'],\n",
       " ['they re mine .', 'elles sont a moi .'],\n",
       " ['they re rich .', 'ils sont riches .'],\n",
       " ['they re rich .', 'elles sont riches .'],\n",
       " ['they re weak .', 'ils sont faibles .'],\n",
       " ['they re weak .', 'elles sont faibles .'],\n",
       " ['we are arabs .', 'nous sommes arabes .'],\n",
       " ['we are happy .', 'nous sommes heureux .'],\n",
       " ['we re a team .', 'nous sommes une equipe .'],\n",
       " ['we re adults .', 'nous sommes des adultes .'],\n",
       " ['we re all ok .', 'nous allons tous bien .'],\n",
       " ['we re at war .', 'nous sommes en guerre .'],\n",
       " ['we re biased .', 'notre point de vue est biaise .'],\n",
       " ['we re biased .', 'nous avons des prejuges .'],\n",
       " ['we re buying .', 'nous achetons .'],\n",
       " ['we re closed .', 'nous sommes fermes .'],\n",
       " ['we re coming .', 'nous venons .'],\n",
       " ['we re dating .', 'nous sortons ensemble .'],\n",
       " ['we re doomed .', 'nous sommes condamnes .'],\n",
       " ['we re hiding .', 'nous nous cachons .'],\n",
       " ['we re inside .', 'nous sommes a l interieur .'],\n",
       " ['we re joking .', 'nous plaisantons .'],\n",
       " ['we re losing .', 'nous perdons .'],\n",
       " ['we re losing .', 'nous sommes en train de perdre .'],\n",
       " ['we re moving .', 'nous sommes en train de bouger .'],\n",
       " ['we re normal .', 'nous sommes normaux .'],\n",
       " ['we re normal .', 'nous sommes normales .'],\n",
       " ['we re paying .', 'nous sommes en train de payer .'],\n",
       " ['we re pooped .', 'nous sommes creves .'],\n",
       " ['we re pooped .', 'nous sommes crevees .'],\n",
       " ['we re ruined .', 'nous sommes ruines .'],\n",
       " ['we re ruined .', 'nous sommes ruinees .'],\n",
       " ['we re shaken .', 'nous sommes remues .'],\n",
       " ['we re shaken .', 'nous sommes remuees .'],\n",
       " ['we re sneaky .', 'nous sommes sournois .'],\n",
       " ['we re sneaky .', 'nous sommes sournoises .'],\n",
       " ['we re strong .', 'nous sommes forts .'],\n",
       " ['we re strong .', 'nous sommes fortes .'],\n",
       " ['we re trying .', 'nous essayons .'],\n",
       " ['you are good .', 'vous etes bon .'],\n",
       " ['you are good .', 'vous etes bonne .'],\n",
       " ['you are good .', 'vous etes bons .'],\n",
       " ['you are good .', 'vous etes bonnes .'],\n",
       " ['you are good .', 'tu es bon .'],\n",
       " ['you are good .', 'tu es bonne .'],\n",
       " ['you are late .', 'tu es en retard .'],\n",
       " ['you are late .', 'vous etes en retard .'],\n",
       " ['you are rich .', 'vous etes riches .'],\n",
       " ['you re bossy .', 'tu joues au chef .'],\n",
       " ['you re bossy .', 'tu fais le chef .'],\n",
       " ['you re crazy .', 'tu es fou .'],\n",
       " ['you re cruel .', 'tu es cruelle .'],\n",
       " ['you re cruel .', 'tu es cruel .'],\n",
       " ['you re cruel .', 'vous etes cruelle .'],\n",
       " ['you re cruel .', 'vous etes cruelles .'],\n",
       " ['you re cruel .', 'vous etes cruel .'],\n",
       " ['you re cruel .', 'vous etes cruels .'],\n",
       " ['you re early .', 'tu viens tot .'],\n",
       " ['you re early .', 'vous etes matinal .'],\n",
       " ['you re early .', 'vous etes matinale .'],\n",
       " ['you re early .', 'tu es matinal .'],\n",
       " ['you re early .', 'tu es matinale .'],\n",
       " ['you re early .', 'tu es en avance .'],\n",
       " ['you re early .', 'vous etes en avance .'],\n",
       " ['you re fired .', 'tu es vire .'],\n",
       " ['you re fired .', 'tu es licencie .'],\n",
       " ['you re first .', 'tu es en premier .'],\n",
       " ['you re first .', 'tu passes en premier .'],\n",
       " ['you re first .', 'vous etes en premier .'],\n",
       " ['you re funny .', 't es marrante .'],\n",
       " ['you re funny .', 't es marrant .'],\n",
       " ['you re funny .', 'vous etes marrants .'],\n",
       " ['you re funny .', 'vous etes marrantes .'],\n",
       " ['you re funny .', 'vous etes marrant .'],\n",
       " ['you re funny .', 'vous etes marrante .'],\n",
       " ['you re fussy .', 'tu es difficile .'],\n",
       " ['you re fussy .', 'tu fais des manieres .'],\n",
       " ['you re fussy .', 'vous faites des manieres .'],\n",
       " ['you re gross !', 'tu es malpoli !'],\n",
       " ['you re lying !', 'tu mens !'],\n",
       " ['you re lying !', 'vous mentez !'],\n",
       " ['you re lying .', 'vous mentez .'],\n",
       " ['you re moody .', 'tu es lunatique .'],\n",
       " ['you re naive .', 'tu es naif .'],\n",
       " ['you re naive .', 'tu es naive .'],\n",
       " ['you re naive .', 'vous etes naif .'],\n",
       " ['you re naive .', 'vous etes naive .'],\n",
       " ['you re naive .', 'vous etes naifs .'],\n",
       " ['you re naive .', 'vous etes naives .'],\n",
       " ['you re quiet .', 'tu es calme .'],\n",
       " ['you re quiet .', 'tu es tranquille .'],\n",
       " ['you re right .', 'tu as raison .'],\n",
       " ['you re silly .', 'tu es idiot .'],\n",
       " ['you re silly .', 'vous etes idiot .'],\n",
       " ['you re silly .', 'vous etes idiote .'],\n",
       " ['you re silly .', 'tu es idiote .'],\n",
       " ['you re silly .', 'vous etes idiots .'],\n",
       " ['you re silly .', 'vous etes idiotes .'],\n",
       " ['you re stuck .', 't es plante .'],\n",
       " ['you re stuck .', 't es plantee .'],\n",
       " ['you re stuck .', 'vous etes plantes .'],\n",
       " ['you re stuck .', 'vous etes plantees .'],\n",
       " ['you re stuck .', 'vous etes plantee .'],\n",
       " ['you re stuck .', 'vous etes plante .'],\n",
       " ['you re tough .', 'tu es dure .'],\n",
       " ['you re tough .', 'tu es dur .'],\n",
       " ['you re tough .', 'vous etes dur .'],\n",
       " ['you re tough .', 'vous etes dure .'],\n",
       " ['you re tough .', 'vous etes durs .'],\n",
       " ['you re tough .', 'vous etes dures .'],\n",
       " ['you re upset .', 'tu es contrariee .'],\n",
       " ['you re upset .', 'tu es contrarie .'],\n",
       " ['you re weird .', 'tu es bizarre .'],\n",
       " ['you re weird .', 'vous etes bizarre .'],\n",
       " ['you re weird .', 'vous etes bizarres .'],\n",
       " ['you re wrong .', 'tu es dans l erreur .'],\n",
       " ['you re wrong .', 'tu as tort .'],\n",
       " ['you re young .', 'tu es jeune .'],\n",
       " ['you re young .', 'vous etes jeune .'],\n",
       " ['you re young .', 'vous etes jeunes .'],\n",
       " ['he is british .', 'il est britannique .'],\n",
       " ['he is english .', 'il est anglais .'],\n",
       " ['he is a thief .', 'c est un voleur .'],\n",
       " ['he is foolish .', 'il est idiot .'],\n",
       " ['he is my boss .', 'c est mon patron .'],\n",
       " ['he is my type !', 'il est mon genre !'],\n",
       " ['he is no fool .', 'il n est pas idiot .'],\n",
       " ['he is no fool .', 'il n est pas fou .'],\n",
       " ['he is out now .', 'il est actuellement sorti .'],\n",
       " ['he is reading .', 'il lit .'],\n",
       " ['he is reading .', 'il est en train de lire .'],\n",
       " ['he is running .', 'il court .'],\n",
       " ['he is skating .', 'il fait du patin .'],\n",
       " ['he is skating .', 'il patine .'],\n",
       " ['he is too old .', 'il est trop vieux .'],\n",
       " ['he s a grouch .', 'c est un rouspeteur .'],\n",
       " ['he s a jesuit .', 'il est jesuite .'],\n",
       " ['he s a senior .', 'c est un aine .'],\n",
       " ['he s a senior .', 'c est un ancien .'],\n",
       " ['he s a senior .', 'c est un retraite .'],\n",
       " ['he s a tycoon .', 'c est un magnat .'],\n",
       " ['he s addicted .', 'il est accro .'],\n",
       " ['he s addicted .', 'il a une assuetude .'],\n",
       " ['he s addicted .', 'il est drogue .'],\n",
       " ['he s adorable .', 'il est adorable .'],\n",
       " ['he s after me .', 'il est derriere moi .'],\n",
       " ['he s after me .', 'il est apres moi .'],\n",
       " ['he s after me .', 'il est apres mes fesses .'],\n",
       " ['he s after me .', 'il me poursuit .'],\n",
       " ['he s annoying .', 'il est embetant .'],\n",
       " ['he s demented .', 'il est fou .'],\n",
       " ['he s in tokyo .', 'il est a tokyo .'],\n",
       " ['he s innocent .', 'il est innocent .'],\n",
       " ['he s innocent .', 'il est ingenu .'],\n",
       " ['he s insecure .', 'il est peu sur de lui .'],\n",
       " ['he s insecure .', 'il manque de confiance en lui .'],\n",
       " ['he s no saint .', 'il n est pas un saint .'],\n",
       " ['he s no saint .', 'ce n est pas un saint .'],\n",
       " ['he s not home .', 'il n est pas a la maison .'],\n",
       " ['he s not sick .', 'il n est pas malade .'],\n",
       " ['he s outraged .', 'il est indigne .'],\n",
       " ['he s ruthless .', 'il est impitoyable .'],\n",
       " ['he s ruthless .', 'il est sans pitie .'],\n",
       " ['he s so young .', 'il est si jeune .'],\n",
       " ['he s so young .', 'il est tellement jeune .'],\n",
       " ['he s studying .', 'il etudie .'],\n",
       " ['he s studying .', 'il est en train d etudier .'],\n",
       " ['he s too busy .', 'il est trop occupe .'],\n",
       " ['he s too slow .', 'il est trop lent .'],\n",
       " ['he s very ill .', 'il est tres malade .'],\n",
       " ['he s very ill .', 'il est fort malade .'],\n",
       " ['he s your son .', 'il est ton fils .'],\n",
       " ['he s your son .', 'c est ton fils .'],\n",
       " ['he s your son .', 'c est votre fils .'],\n",
       " ['he s your son .', 'il est votre fils .'],\n",
       " ['i am american .', 'je suis americain .'],\n",
       " ['i am american .', 'je suis americaine .'],\n",
       " ['i am japanese .', 'je suis japonais .'],\n",
       " ['i am a muslim .', 'je suis musulman .'],\n",
       " ['i am a muslim .', 'je suis musulmane .'],\n",
       " ['i am a muslim .', 'je suis musulman .'],\n",
       " ['i am a runner .', 'je suis un coureur .'],\n",
       " ['i am all ears .', 'je suis tout ouie .'],\n",
       " ['i am diabetic .', 'je suis diabetique .'],\n",
       " ['i am divorced .', 'je suis divorce .'],\n",
       " ['i am divorced .', 'je suis divorcee .'],\n",
       " ['i am in paris .', 'je suis a paris .'],\n",
       " ['i am new here .', 'je suis nouveau ici .'],\n",
       " ['i am new here .', 'je suis nouveau ici .'],\n",
       " ['i am not deaf .', 'je ne suis pas sourd .'],\n",
       " ['i am so sorry .', 'je suis tellement desole !'],\n",
       " ['i am so sorry .', 'je suis tellement desolee !'],\n",
       " ['i am very sad .', 'je suis tres triste .'],\n",
       " ['i m a patient .', 'je suis un patient .'],\n",
       " ['i m a patient .', 'je suis une patiente .'],\n",
       " ['i m a student .', 'je suis etudiant .'],\n",
       " ['i m a teacher .', 'je suis professeur .'],\n",
       " ['i m a teacher .', 'je suis enseignante .'],\n",
       " ['i m adaptable .', 'je m adapte .'],\n",
       " ['i m afraid so .', 'j en ai peur .'],\n",
       " ['i m all alone .', 'je suis tout seul .'],\n",
       " ['i m all right .', 'je vais bien .'],\n",
       " ['i m all yours .', 'je suis tout a toi .'],\n",
       " ['i m all yours .', 'je suis tout a vous .'],\n",
       " ['i m all yours .', 'je suis toute a toi .'],\n",
       " ['i m all yours .', 'je suis toute a vous .'],\n",
       " ['i m ambitious .', 'je suis ambitieuse .'],\n",
       " ['i m ambitious .', 'je suis ambitieux .'],\n",
       " ['i m an artist .', 'je suis un artiste .'],\n",
       " ['i m an artist .', 'je suis une artiste .'],\n",
       " ['i m an orphan .', 'je suis orphelin .'],\n",
       " ['i m attentive .', 'je suis attentive .'],\n",
       " ['i m attentive .', 'je suis attentif .'],\n",
       " ['i m available .', 'je suis disponible .'],\n",
       " ['i m beautiful .', 'je suis belle .'],\n",
       " ['i m beautiful .', 'je suis beau .'],\n",
       " ['i m busy too .', 'je suis egalement affaire .'],\n",
       " ['i m busy too .', 'je suis egalement affairee .'],\n",
       " ['i m busy too .', 'je suis egalement occupe .'],\n",
       " ['i m busy too .', 'je suis egalement occupee .'],\n",
       " ['i m concerned .', 'je suis preoccupe .'],\n",
       " ['i m concerned .', 'je suis preoccupee .'],\n",
       " ['i m confident .', 'j ai confiance .'],\n",
       " ['i m contented .', 'me voila satisfait .'],\n",
       " ['i m contented .', 'me voila satisfaite .'],\n",
       " ['i m convinced .', 'j en suis convaincu .'],\n",
       " ['i m depressed .', 'je suis deprime .'],\n",
       " ['i m desperate .', 'je suis desespere .'],\n",
       " ['i m desperate .', 'je suis desesperee .'],\n",
       " ['i m different .', 'je suis differente .'],\n",
       " ['i m disgusted .', 'je suis degoute .'],\n",
       " ['i m disgusted .', 'je suis degoutee .'],\n",
       " ['i m easygoing .', 'je suis facile a vivre .'],\n",
       " ['i m exhausted .', 'je suis epuisee .'],\n",
       " ['i m exhausted .', 'je suis epuise .'],\n",
       " ['i m exhausted .', 'je suis vanne .'],\n",
       " ['i m exhausted .', 'je suis vannee .'],\n",
       " ['i m exhausted .', 'je suis fourbu .'],\n",
       " ['i m exhausted .', 'je suis creve .'],\n",
       " ['i m exhausted .', 'je suis crevee .'],\n",
       " ['i m forgetful .', 'je suis distrait .'],\n",
       " ['i m forgetful .', 'je suis distraite .'],\n",
       " ['i m forgetful .', 'je suis etourdi .'],\n",
       " ['i m forgetful .', 'je suis etourdie .'],\n",
       " ['i m home tom .', 'je suis chez moi tom .'],\n",
       " ['i m hung over .', 'j ai mal au c ur .'],\n",
       " ['i m impatient .', 'je suis impatient .'],\n",
       " ['i m impatient .', 'je suis impatiente .'],\n",
       " ['i m important .', 'je suis important .'],\n",
       " ['i m impressed .', 'je suis impressionnee .'],\n",
       " ['i m impulsive .', 'je suis impulsif .'],\n",
       " ['i m impulsive .', 'je suis impulsive .'],\n",
       " ['i m in boston .', 'je suis a boston .'],\n",
       " ['i m in danger .', 'je suis en danger .'],\n",
       " ['i m intrigued .', 'je suis intrigue .'],\n",
       " ['i m intrigued .', 'je suis intriguee .'],\n",
       " ['i m intrigued .', 'cela m intrigue .'],\n",
       " ['i m just lazy .', 'je suis juste paresseux .'],\n",
       " ['i m just lazy .', 'je suis juste paresseuse .'],\n",
       " ['i m listening .', 'j ecoute .'],\n",
       " ['i m motivated .', 'je suis motivee .'],\n",
       " ['i m motivated .', 'je suis motive .'],\n",
       " ['i m no expert .', 'je ne suis pas un expert .'],\n",
       " ['i m not a cop .', 'je ne suis pas flic .'],\n",
       " ['i m not a fan .', 'je ne fais pas partie de ses admirateurs .'],\n",
       " ['i m not a fan .', 'je ne fais pas partie de leurs admirateurs .'],\n",
       " ['i m not alone .', 'je ne suis pas seul .'],\n",
       " ['i m not alone .', 'je ne suis pas seule .'],\n",
       " ['i m not angry !', 'je ne suis pas en colere !'],\n",
       " ['i m not angry .', 'je ne suis pas en colere .'],\n",
       " ['i m not armed .', 'je ne suis pas arme .'],\n",
       " ['i m not armed .', 'je ne suis pas armee .'],\n",
       " ['i m not blind .', 'je ne suis pas aveugle .'],\n",
       " ['i m not crazy .', 'je ne suis pas fou .'],\n",
       " ['i m not crazy .', 'je ne suis pas folle .'],\n",
       " ['i m not dying .', 'je ne suis pas en train de mourir .'],\n",
       " ['i m not going .', 'je n y vais pas .'],\n",
       " ['i m not going .', 'je ne m y rends pas .'],\n",
       " ['i m not going .', 'je ne m en vais pas .'],\n",
       " ['i m not happy .', 'je ne suis pas content .'],\n",
       " ['i m not happy .', 'je ne suis pas heureux .'],\n",
       " ['i m not happy .', 'je ne suis pas heureuse .'],\n",
       " ['i m not happy .', 'je ne suis pas contente .'],\n",
       " ['i m not lying .', 'je ne suis pas en train de mentir .'],\n",
       " ['i m not naive .', 'je ne suis pas naif .'],\n",
       " ...]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pairs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "6b496105",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入时间和数学工具包\n",
    "import time\n",
    "import math\n",
    "\n",
    "def timeSince(since):\n",
    "    \"获得每次打印的训练耗时, since是训练开始时间\"\n",
    "    # 获得当前时间\n",
    "    now = time.time()\n",
    "    # 获得时间差，就是训练耗时\n",
    "    s = now - since\n",
    "    # 将秒转化为分钟, 并取整\n",
    "    m = math.floor(s / 60)\n",
    "    # 计算剩下不够凑成1分钟的秒数\n",
    "    s -= m * 60\n",
    "    # 返回指定格式的耗时\n",
    "    return '%dm %ds' % (m, s)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "30b45de2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 假定模型训练开始时间是10min之前\n",
    "since = time.time() - 10*60\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "fec2cb47",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10m 1s\n"
     ]
    }
   ],
   "source": [
    "period = timeSince(since)\n",
    "print(period)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "0e931355",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['i m .', 'j ai ans .'],\n",
       " ['i m ok .', 'je vais bien .'],\n",
       " ['i m ok .', 'ca va .'],\n",
       " ['i m fat .', 'je suis gras .'],\n",
       " ['i m fat .', 'je suis gros .'],\n",
       " ['i m fit .', 'je suis en forme .'],\n",
       " ['i m hit !', 'je suis touche !'],\n",
       " ['i m hit !', 'je suis touchee !'],\n",
       " ['i m ill .', 'je suis malade .'],\n",
       " ['i m sad .', 'je suis triste .'],\n",
       " ['i m shy .', 'je suis timide .'],\n",
       " ['i m wet .', 'je suis mouille .'],\n",
       " ['i m wet .', 'je suis mouillee .'],\n",
       " ['he s wet .', 'il est mouille .'],\n",
       " ['i am fat .', 'je suis gras .'],\n",
       " ['i m back .', 'je suis revenu .'],\n",
       " ['i m back .', 'me revoila .'],\n",
       " ['i m bald .', 'je suis chauve .'],\n",
       " ['i m busy .', 'je suis occupe .'],\n",
       " ['i m busy .', 'je suis occupee .'],\n",
       " ['i m calm .', 'je suis calme .'],\n",
       " ['i m cold .', 'j ai froid .'],\n",
       " ['i m done .', 'j en ai fini .'],\n",
       " ['i m fine .', 'tout va bien .'],\n",
       " ['i m fine .', 'je vais bien .'],\n",
       " ['i m fine .', 'ca va .'],\n",
       " ['i m free !', 'je suis libre !'],\n",
       " ['i m free .', 'je suis libre .'],\n",
       " ['i m free .', 'je suis disponible .'],\n",
       " ['i m full .', 'je suis repu !'],\n",
       " ['i m full .', 'je suis rassasie !'],\n",
       " ['i m glad .', 'je suis content .'],\n",
       " ['i m home .', 'je suis chez moi .'],\n",
       " ['i m late .', 'je suis en retard .'],\n",
       " ['i m lazy .', 'je suis paresseux .'],\n",
       " ['i m lazy .', 'je suis faineant .'],\n",
       " ['i m lazy .', 'je suis paresseuse .'],\n",
       " ['i m lazy .', 'je suis faineante .'],\n",
       " ['i m okay .', 'je vais bien .'],\n",
       " ['i m okay .', 'je me porte bien .'],\n",
       " ['i m safe .', 'je suis en securite .'],\n",
       " ['i m sick .', 'je suis malade .'],\n",
       " ['i m sure .', 'j en suis certain .'],\n",
       " ['i m sure .', 'je suis certain .'],\n",
       " ['i m sure .', 'j en suis sur .'],\n",
       " ['i m sure .', 'j en suis sure .'],\n",
       " ['i m tall .', 'je suis grande .'],\n",
       " ['i m thin .', 'je suis mince .'],\n",
       " ['i m tidy .', 'je suis ordonne .'],\n",
       " ['i m tidy .', 'je suis ordonnee .'],\n",
       " ['i m ugly .', 'je suis laid .'],\n",
       " ['i m ugly .', 'je suis laide .'],\n",
       " ['i m weak .', 'je suis faible .'],\n",
       " ['i m well .', 'je vais bien .'],\n",
       " ['i m well .', 'je me porte bien .'],\n",
       " ['he is ill .', 'il est malade .'],\n",
       " ['he is old .', 'il est vieux .'],\n",
       " ['he s a dj .', 'il est dj .'],\n",
       " ['he s good .', 'il est bon .'],\n",
       " ['he s lazy .', 'il est paresseux .'],\n",
       " ['he s rich .', 'il est riche .'],\n",
       " ['i am busy .', 'je suis occupe .'],\n",
       " ['i am calm .', 'je suis calme .'],\n",
       " ['i am cold .', 'j ai froid .'],\n",
       " ['i am good .', 'je suis bon .'],\n",
       " ['i am here .', 'je suis ici .'],\n",
       " ['i am lazy .', 'je suis paresseux .'],\n",
       " ['i am lazy .', 'je suis faineant .'],\n",
       " ['i am lazy .', 'je suis paresseuse .'],\n",
       " ['i am lazy .', 'je suis faineante .'],\n",
       " ['i am okay .', 'je vais bien .'],\n",
       " ['i am sick .', 'je suis malade .'],\n",
       " ['i am sure .', 'je suis sur .'],\n",
       " ['i am sure .', 'je suis certain .'],\n",
       " ['i am weak .', 'je suis faible .'],\n",
       " ['i m a cop .', 'je suis flic .'],\n",
       " ['i m a man .', 'je suis un homme .'],\n",
       " ['i m alone .', 'je suis seule .'],\n",
       " ['i m alone .', 'je suis seul .'],\n",
       " ['i m armed .', 'je suis arme .'],\n",
       " ['i m armed .', 'je suis armee .'],\n",
       " ['i m awake .', 'je suis reveille .'],\n",
       " ['i m blind .', 'je suis aveugle .'],\n",
       " ['i m broke .', 'je suis fauche .'],\n",
       " ['i m crazy .', 'je suis fou .'],\n",
       " ['i m crazy .', 'je suis folle .'],\n",
       " ['i m cured .', 'je suis gueri .'],\n",
       " ['i m cured .', 'je suis guerie .'],\n",
       " ['i m drunk .', 'je suis saoul .'],\n",
       " ['i m drunk .', 'je suis soul .'],\n",
       " ['i m drunk .', 'je suis ivre .'],\n",
       " ['i m dying .', 'je me meurs .'],\n",
       " ['i m early .', 'je suis en avance .'],\n",
       " ['i m first .', 'je suis en premier .'],\n",
       " ['i m fussy .', 'je suis difficile .'],\n",
       " ['i m fussy .', 'je suis tatillon .'],\n",
       " ['i m fussy .', 'je suis tatillonne .'],\n",
       " ['i m going .', 'je pars maintenant .'],\n",
       " ['i m going .', 'je me tire .'],\n",
       " ['i m going .', 'j y vais .'],\n",
       " ['i m going .', 'je pars .'],\n",
       " ['i m loyal .', 'je suis loyal .'],\n",
       " ['i m loyal .', 'je suis loyale .'],\n",
       " ['i m lucky .', 'je suis veinard .'],\n",
       " ['i m lucky .', 'je suis veinarde .'],\n",
       " ['i m lucky .', 'j ai du pot .'],\n",
       " ['i m lucky .', 'je suis chanceux .'],\n",
       " ['i m lucky .', 'je suis chanceuse .'],\n",
       " ['i m lying .', 'je suis en train de mentir .'],\n",
       " ['i m quiet .', 'je suis tranquille .'],\n",
       " ['i m ready !', 'je suis prete !'],\n",
       " ['i m ready !', 'je suis pret !'],\n",
       " ['i m ready .', 'je suis pret .'],\n",
       " ['i m right .', 'j ai raison .'],\n",
       " ['i m sober .', 'je suis sobre .'],\n",
       " ['i m sorry .', 'excuse moi .'],\n",
       " ['i m sorry .', 'desole .'],\n",
       " ['i m sorry .', 'desole !'],\n",
       " ['i m sorry .', 'je suis desole .'],\n",
       " ['i m sorry .', 'je suis desolee .'],\n",
       " ['i m stuck .', 'je suis coincee .'],\n",
       " ['i m timid .', 'je suis timide .'],\n",
       " ['i m tired .', 'je suis fatigue !'],\n",
       " ['i m tough .', 'je suis dur .'],\n",
       " ['i m tough .', 'je suis dure .'],\n",
       " ['i m tough .', 'je suis dur a cuire .'],\n",
       " ['i m tough .', 'je suis dure a cuire .'],\n",
       " ['i m yours .', 'je suis a toi .'],\n",
       " ['i m yours .', 'je suis a vous .'],\n",
       " ['she s hot .', 'elle est chaude .'],\n",
       " ['she s hot .', 'elle est tres attirante .'],\n",
       " ['we re hot .', 'nous avons chaud .'],\n",
       " ['we re sad .', 'nous sommes tristes .'],\n",
       " ['we re shy .', 'nous sommes timides .'],\n",
       " ['he is a dj .', 'il est dj .'],\n",
       " ['he is busy .', 'il a a faire .'],\n",
       " ['he is here !', 'il est ici !'],\n",
       " ['he is kind .', 'il est gentil .'],\n",
       " ['he is late .', 'il est en retard .'],\n",
       " ['he is lazy .', 'il est faineant .'],\n",
       " ['he is lazy .', 'il est paresseux .'],\n",
       " ['he is poor .', 'il est pauvre .'],\n",
       " ['he is sick .', 'il est malade .'],\n",
       " ['he s swiss .', 'il est suisse .'],\n",
       " ['he s swiss .', 'il est helvete .'],\n",
       " ['he s broke .', 'il est ruine .'],\n",
       " ['he s broke .', 'il est fauche .'],\n",
       " ['he s drunk .', 'il est ivre .'],\n",
       " ['he s drunk .', 'il est soul .'],\n",
       " ['he s smart .', 'il est intelligent .'],\n",
       " ['i am a man .', 'je suis un homme .'],\n",
       " ['i am human .', 'je suis humain .'],\n",
       " ['i am ready .', 'je suis pret .'],\n",
       " ['i am right .', 'j ai raison .'],\n",
       " ['i am sorry .', 'je suis desole .'],\n",
       " ['i am sorry .', 'je suis desolee .'],\n",
       " ['i am tired .', 'je suis fatigue !'],\n",
       " ['i am tired .', 'je suis creve .'],\n",
       " ['i m french .', 'je suis francais .'],\n",
       " ['i m korean .', 'je suis coreen .'],\n",
       " ['i m a hero .', 'je suis un heros .'],\n",
       " ['i m a liar .', 'je suis un menteur .'],\n",
       " ['i m baking !', 'je cuis !'],\n",
       " ['i m better .', 'je vais mieux .'],\n",
       " ['i m buying .', 'je paie .'],\n",
       " ['i m buying .', 'c est moi qui paie .'],\n",
       " ['i m chubby .', 'je suis grassouillet .'],\n",
       " ['i m chubby .', 'je suis grassouillette .'],\n",
       " ['i m eating .', 'je mange .'],\n",
       " ['i m famous .', 'je suis connu .'],\n",
       " ['i m famous .', 'je suis connue .'],\n",
       " ['i m faster .', 'je suis plus rapide .'],\n",
       " ['i m flabby .', 'je suis flasque .'],\n",
       " ['i m greedy .', 'je suis cupide .'],\n",
       " ['i m greedy .', 'je suis gourmand .'],\n",
       " ['i m greedy .', 'je suis gourmande .'],\n",
       " ['i m hiding .', 'je me cache .'],\n",
       " ['i m honest .', 'je suis honnete .'],\n",
       " ['i m humble .', 'je suis humble .'],\n",
       " ['i m hungry !', 'j ai faim !'],\n",
       " ['i m hungry .', 'j ai faim !'],\n",
       " ['i m immune .', 'je suis immunise .'],\n",
       " ['i m immune .', 'je suis immunisee .'],\n",
       " ['i m in bed .', 'je suis au lit .'],\n",
       " ['i m in bed .', 'je suis alite .'],\n",
       " ['i m in bed .', 'je suis alitee .'],\n",
       " ['i m joking .', 'je rigole !'],\n",
       " ['i m loaded .', 'je suis saoul .'],\n",
       " ['i m lonely .', 'je me sens seul .'],\n",
       " ['i m lonely .', 'je me sens seule .'],\n",
       " ['i m losing .', 'je suis en train de perdre .'],\n",
       " ['i m moving .', 'je suis en train de demenager .'],\n",
       " ['i m normal .', 'je suis normal .'],\n",
       " ['i m normal .', 'je suis normale .'],\n",
       " ['i m paying .', 'c est moi qui paie .'],\n",
       " ['i m paying .', 'je suis en train de payer .'],\n",
       " ['i m pooped .', 'je suis creve .'],\n",
       " ['i m rested .', 'je suis repose .'],\n",
       " ['i m rested .', 'je suis reposee .'],\n",
       " ['i m ruined .', 'je suis ruine .'],\n",
       " ['i m ruined .', 'je suis ruinee .'],\n",
       " ['i m shaken .', 'je suis remue .'],\n",
       " ['i m shaken .', 'je suis remuee .'],\n",
       " ['i m single .', 'je suis celibataire .'],\n",
       " ['i m skinny .', 'je suis maigrichon .'],\n",
       " ['i m skinny .', 'je suis maigrichonne .'],\n",
       " ['i m sleepy !', 'je suis fatigue !'],\n",
       " ['i m sleepy !', 'j ai sommeil !'],\n",
       " ['i m sneaky .', 'je suis sournois .'],\n",
       " ['i m sneaky .', 'je suis sournoise .'],\n",
       " ['i m strict .', 'je suis strict .'],\n",
       " ['i m strict .', 'je suis stricte .'],\n",
       " ['i m strong .', 'je suis fort .'],\n",
       " ['i m strong .', 'je suis forte .'],\n",
       " ['i m thirty .', 'j ai trente ans .'],\n",
       " ['i m wasted .', 'je suis affaiblie .'],\n",
       " ['she is old .', 'elle est vieille .'],\n",
       " ['she s busy .', 'elle est occupee .'],\n",
       " ['she s nice .', 'elle est gentille .'],\n",
       " ['we are men .', 'nous sommes des hommes .'],\n",
       " ['we re back .', 'nous sommes de retour .'],\n",
       " ['we re busy .', 'nous sommes occupes .'],\n",
       " ['we re busy .', 'nous sommes occupees .'],\n",
       " ['we re done .', 'nous avons fini .'],\n",
       " ['we re done .', 'nous avons termine .'],\n",
       " ['we re done .', 'nous en avons fini .'],\n",
       " ['we re done .', 'nous en avons termine .'],\n",
       " ['we re even .', 'nous sommes quittes .'],\n",
       " ['we re fine .', 'nous allons bien .'],\n",
       " ['we re here .', 'nous sommes ici .'],\n",
       " ['we re here .', 'nous sommes la .'],\n",
       " ['we re home .', 'nous sommes chez nous .'],\n",
       " ['we re late .', 'nous sommes en retard .'],\n",
       " ['we re lost .', 'nous sommes perdus .'],\n",
       " ['we re lost .', 'nous sommes perdues .'],\n",
       " ['we re rich .', 'nous sommes riches .'],\n",
       " ['we re safe .', 'nous sommes en securite .'],\n",
       " ['we re sunk .', 'on est foutu .'],\n",
       " ['we re sunk .', 'nous sommes foutus .'],\n",
       " ['we re weak .', 'nous sommes faibles .'],\n",
       " ['you re bad .', 'tu es vilain .'],\n",
       " ['you re big .', 'tu es grand .'],\n",
       " ['you re big .', 'tu es grande .'],\n",
       " ['you re big .', 'vous etes grand .'],\n",
       " ['you re big .', 'vous etes grande .'],\n",
       " ['you re big .', 'vous etes grands .'],\n",
       " ['you re big .', 'vous etes grandes .'],\n",
       " ['you re fun .', 't es marrante .'],\n",
       " ['you re fun .', 't es marrant .'],\n",
       " ['you re old .', 'tu es vieux .'],\n",
       " ['you re old .', 'tu es vieille .'],\n",
       " ['you re old .', 'vous etes vieux .'],\n",
       " ['you re old .', 'vous etes vieilles .'],\n",
       " ['you re old .', 'vous etes vieille .'],\n",
       " ['you re sad .', 'tu es triste .'],\n",
       " ['you re sad .', 'vous etes triste .'],\n",
       " ['you re shy .', 'tu es timide .'],\n",
       " ['you re shy .', 'vous etes timide .'],\n",
       " ['he is drunk .', 'il est ivre .'],\n",
       " ['he is drunk .', 'il est soul .'],\n",
       " ['he is eight .', 'il a huit ans .'],\n",
       " ['he is hated .', 'il est hai .'],\n",
       " ['he is nasty .', 'il est mechant .'],\n",
       " ['he is smart .', 'il est intelligent .'],\n",
       " ['he is young .', 'il est jeune .'],\n",
       " ['he s a hunk .', 'c est un beau mec .'],\n",
       " ['he s a hunk .', 'c est un beau gosse .'],\n",
       " ['he s a jerk .', 'c est un pauvre type .'],\n",
       " ['he s a liar .', 'c est un menteur .'],\n",
       " ['he s a nerd .', 'c est un binoclard .'],\n",
       " ['he s a slob .', 'c est un flemmard .'],\n",
       " ['he s asleep .', 'il est endormi .'],\n",
       " ['he s coming .', 'il arrive .'],\n",
       " ['he s coming .', 'il est en train d arriver .'],\n",
       " ['he s crying .', 'il est en train de pleurer .'],\n",
       " ['he s faking .', 'il simule .'],\n",
       " ['he s loaded .', 'il est blinde .'],\n",
       " ['he s loaded .', 'il est pete de thune .'],\n",
       " ['he s loaded .', 'il est plein aux as .'],\n",
       " ['he s my age .', 'il a mon age .'],\n",
       " ['he s not in .', 'il n est pas chez lui .'],\n",
       " ['he s not in .', 'il n est pas a l interieur .'],\n",
       " ['he s not in .', 'il n est pas la .'],\n",
       " ['i am french .', 'je suis francais .'],\n",
       " ['i am korean .', 'je suis coreen .'],\n",
       " ['i am a cook .', 'je suis cuisinier .'],\n",
       " ['i am a monk .', 'je suis un moine .'],\n",
       " ['i am better .', 'je vais mieux .'],\n",
       " ['i am better .', 'je suis mieux .'],\n",
       " ['i am coming .', 'j arrive .'],\n",
       " ['i am hungry .', 'j ai faim !'],\n",
       " ['i am joking .', 'je plaisante .'],\n",
       " ['i am single .', 'je suis celibataire .'],\n",
       " ['i am taller .', 'je suis plus grand .'],\n",
       " ['i m too .', 'j ai egalement dix sept ans .'],\n",
       " ['i m finnish .', 'je suis finlandais .'],\n",
       " ['i m finnish .', 'je suis finlandaise .'],\n",
       " ['i m italian .', 'je suis italien .'],\n",
       " ['i m a baker .', 'je suis boulanger .'],\n",
       " ['i m a baker .', 'je suis boulangere .'],\n",
       " ['i m all set .', 'je suis tout a fait pret .'],\n",
       " ['i m all set .', 'je suis tout a fait prete .'],\n",
       " ['i m ashamed .', 'j ai honte .'],\n",
       " ['i m at home .', 'je suis a la maison .'],\n",
       " ['i m at home .', 'je suis dans la maison .'],\n",
       " ['i m baffled .', 'je suis perplexe .'],\n",
       " ['i m blessed .', 'je suis beni .'],\n",
       " ['i m blessed .', 'je suis benie .'],\n",
       " ['i m careful .', 'je suis prudent .'],\n",
       " ['i m careful .', 'je suis prudente .'],\n",
       " ['i m certain .', 'je suis sur .'],\n",
       " ['i m certain .', 'je suis certain .'],\n",
       " ['i m chicken .', 'j ai les foies .'],\n",
       " ['i m chicken .', 'j ai les chocottes .'],\n",
       " ['i m correct .', 'j ai raison .'],\n",
       " ['i m curious .', 'je suis curieux .'],\n",
       " ['i m curious .', 'je suis curieuse .'],\n",
       " ['i m dancing .', 'je suis en train de danser .'],\n",
       " ['i m dieting .', 'je suis au regime .'],\n",
       " ['i m driving .', 'je suis en train de conduire .'],\n",
       " ['i m driving .', 'je conduis .'],\n",
       " ['i m engaged .', 'je suis fiance .'],\n",
       " ['i m engaged .', 'je suis fiancee .'],\n",
       " ['i m excited .', 'je suis excite .'],\n",
       " ['i m excited .', 'je suis excitee .'],\n",
       " ['i m fasting .', 'je fais la diete .'],\n",
       " ['i m fasting .', 'je suis a la diete .'],\n",
       " ['i m finicky .', 'je suis meticuleux .'],\n",
       " ['i m finicky .', 'je suis meticuleuse .'],\n",
       " ['i m frantic .', 'je suis affole .'],\n",
       " ['i m frantic .', 'je suis affolee .'],\n",
       " ['i m furious .', 'je suis furieux .'],\n",
       " ['i m healthy .', 'je suis en bonne sante .'],\n",
       " ['i m humming .', 'je fredonne .'],\n",
       " ['i m in luck .', 'je suis veinard .'],\n",
       " ['i m in luck .', 'je suis veinarde .'],\n",
       " ['i m jealous .', 'je suis jalouse .'],\n",
       " ['i m jittery .', 'j ai la frousse .'],\n",
       " ['i m kidding .', 'je plaisante .'],\n",
       " ['i m kidding .', 'je rigole !'],\n",
       " ['i m leaving .', 'je pars .'],\n",
       " ['i m married .', 'je suis marie .'],\n",
       " ['i m married .', 'je suis mariee .'],\n",
       " ['i m no fool .', 'je ne suis pas une idiote .'],\n",
       " ['i m no hero .', 'je ne suis pas un heros .'],\n",
       " ['i m no liar .', 'je ne suis pas un menteur .'],\n",
       " ['i m not fat .', 'je ne suis pas gros .'],\n",
       " ['i m not mad .', 'je ne suis pas fou .'],\n",
       " ['i m not mad .', 'je ne suis pas folle .'],\n",
       " ['i m not old .', 'je ne suis pas vieux .'],\n",
       " ['i m not old .', 'je ne suis pas vieille .'],\n",
       " ['i m not sad .', 'je ne suis pas triste .'],\n",
       " ['i m not shy .', 'je ne suis pas timide .'],\n",
       " ['i m on duty .', 'je suis en service .'],\n",
       " ['i m patient .', 'je suis patiente .'],\n",
       " ['i m patient .', 'je suis patient .'],\n",
       " ['i m popular .', 'je suis populaire .'],\n",
       " ['i m psyched .', 'je suis remonte .'],\n",
       " ['i m psychic .', 'je suis voyant .'],\n",
       " ['i m psychic .', 'je suis voyante .'],\n",
       " ['i m puzzled .', 'je suis perplexe .'],\n",
       " ['i m reading .', 'je lis .'],\n",
       " ['i m relaxed .', 'je suis detendu .'],\n",
       " ['i m relaxed .', 'je suis detendue .'],\n",
       " ['i m retired .', 'je suis retraite .'],\n",
       " ['i m retired .', 'je suis retraitee .'],\n",
       " ['i m retired .', 'je suis pensionne .'],\n",
       " ['i m retired .', 'je suis pensionnee .'],\n",
       " ['i m selfish .', 'je suis egoiste .'],\n",
       " ['i m serious .', 'je suis serieux .'],\n",
       " ['i m shocked .', 'je suis choque .'],\n",
       " ['i m shocked .', 'je suis choquee .'],\n",
       " ['i m sincere .', 'je suis sincere .'],\n",
       " ['i m sloshed .', 'je suis bourre .'],\n",
       " ['i m sloshed .', 'je suis bourree .'],\n",
       " ['i m so full .', 'je suis tellement rassasie .'],\n",
       " ['i m starved .', 'je meurs de faim !'],\n",
       " ['i m starved .', 'j ai l estomac dans les talons .'],\n",
       " ['i m starved .', 'j ai la dalle .'],\n",
       " ['i m starved .', 'j ai les crocs .'],\n",
       " ['i m staying .', 'je reste .'],\n",
       " ['i m stuffed .', 'je suis gave .'],\n",
       " ['i m stuffed .', 'je suis gavee .'],\n",
       " ['i m stunned .', 'je suis sidere .'],\n",
       " ['i m stunned .', 'je suis sideree .'],\n",
       " ['i m talking .', 'je suis en train de discuter .'],\n",
       " ['i m teasing .', 'je taquine .'],\n",
       " ['i m thirsty .', 'j ai soif .'],\n",
       " ['i m through .', 'j en ai fini .'],\n",
       " ['i m through .', 'j en ai termine .'],\n",
       " ['i m too fat .', 'je suis trop gros .'],\n",
       " ['i m touched .', 'je suis touche .'],\n",
       " ['i m touched .', 'je suis touchee .'],\n",
       " ['i m unhappy .', 'je suis mecontent .'],\n",
       " ['i m unhappy .', 'je suis mecontente .'],\n",
       " ['i m unlucky .', 'j ai la schcoumoune .'],\n",
       " ['i m wealthy .', 'je suis fortune .'],\n",
       " ['i m wealthy .', 'je suis fortunee .'],\n",
       " ['i m winning .', 'je gagne .'],\n",
       " ['i m winning .', 'je l emporte .'],\n",
       " ['i m working .', 'je suis en train de travailler .'],\n",
       " ['i m worried .', 'je me fais du souci .'],\n",
       " ['she is curt .', 'elle n a pas de charme .'],\n",
       " ['she is dead .', 'elle est morte .'],\n",
       " ['she is kind .', 'elle est gentille .'],\n",
       " ['she is late .', 'elle est en retard .'],\n",
       " ['she s a dog .', 'c est une enfoiree .'],\n",
       " ['she s a fox .', 'c est un renard .'],\n",
       " ['they re bad .', 'ils sont mauvais .'],\n",
       " ['they re bad .', 'elles sont mauvaises .'],\n",
       " ['they re old .', 'ils sont vieux .'],\n",
       " ['they re old .', 'elles sont vieilles .'],\n",
       " ['we are even .', 'nous sommes quittes .'],\n",
       " ['we are even .', 'nous sommes a egalite .'],\n",
       " ['we are here .', 'nous sommes ici .'],\n",
       " ['we are here .', 'nous y sommes .'],\n",
       " ['we are late .', 'nous sommes en retard .'],\n",
       " ['we re alone .', 'nous sommes seuls .'],\n",
       " ['we re alone .', 'nous sommes seules .'],\n",
       " ['we re angry .', 'nous sommes en colere .'],\n",
       " ['we re armed .', 'nous sommes armes .'],\n",
       " ['we re armed .', 'nous sommes armees .'],\n",
       " ['we re bored .', 'nous nous ennuyons .'],\n",
       " ['we re bored .', 'on s emmerde .'],\n",
       " ['we re broke .', 'nous sommes fauches .'],\n",
       " ['we re broke .', 'nous sommes fauchees .'],\n",
       " ['we re broke .', 'on est fauches .'],\n",
       " ['we re dying .', 'nous sommes en train de mourir .'],\n",
       " ['we re early .', 'nous sommes en avance .'],\n",
       " ['we re going .', 'nous y allons .'],\n",
       " ['we re happy .', 'nous sommes heureux .'],\n",
       " ['we re ready .', 'nous sommes pretes .'],\n",
       " ['we re saved .', 'nous sommes sauves .'],\n",
       " ['we re saved .', 'nous sommes sauvees .'],\n",
       " ['we re smart .', 'nous sommes intelligents .'],\n",
       " ['we re smart .', 'nous sommes intelligentes .'],\n",
       " ['we re sorry .', 'nous sommes desoles .'],\n",
       " ['we re sorry .', 'nous sommes desolees .'],\n",
       " ['we re stuck .', 'nous sommes coinces .'],\n",
       " ['we re stuck .', 'nous sommes coincees .'],\n",
       " ['we re tired .', 'nous sommes fatigues .'],\n",
       " ['we re tired .', 'nous sommes fatiguees .'],\n",
       " ['we re twins .', 'nous sommes jumeaux .'],\n",
       " ['we re twins .', 'nous sommes jumelles .'],\n",
       " ['you are big .', 'tu es grand .'],\n",
       " ['you are big .', 'tu es grande .'],\n",
       " ['you are big .', 'vous etes grand .'],\n",
       " ['you are big .', 'vous etes grande .'],\n",
       " ['you are big .', 'vous etes grands .'],\n",
       " ['you are big .', 'vous etes grandes .'],\n",
       " ['you are mad .', 'tu es fou .'],\n",
       " ['you re back .', 'tu es de retour .'],\n",
       " ['you re back .', 'vous etes de retour .'],\n",
       " ['you re cool .', 't es sympa .'],\n",
       " ['you re cool .', 't es decontracte .'],\n",
       " ['you re fair .', 'tu es juste .'],\n",
       " ['you re fair .', 'vous etes juste .'],\n",
       " ['you re fair .', 'vous etes justes .'],\n",
       " ['you re fine .', 'tu vas bien .'],\n",
       " ['you re free .', 'tu es libre .'],\n",
       " ['you re free .', 'vous etes libres .'],\n",
       " ['you re free .', 'vous etes libre .'],\n",
       " ['you re good .', 'vous etes bon .'],\n",
       " ['you re good .', 'vous etes bonne .'],\n",
       " ['you re good .', 'vous etes bons .'],\n",
       " ['you re good .', 'vous etes bonnes .'],\n",
       " ['you re good .', 'tu es bon .'],\n",
       " ['you re good .', 'tu es bonne .'],\n",
       " ['you re good .', 't es bon .'],\n",
       " ['you re good .', 't es bonne .'],\n",
       " ['you re kind .', 'tu es gentil .'],\n",
       " ['you re kind .', 'tu es gentille .'],\n",
       " ['you re lazy .', 'tu es paresseux .'],\n",
       " ['you re lazy .', 'tu es paresseuse .'],\n",
       " ['you re lazy .', 'vous etes paresseux .'],\n",
       " ['you re lazy .', 'vous etes paresseuses .'],\n",
       " ['you re lazy .', 'vous etes paresseuse .'],\n",
       " ['you re lost .', 'tu es perdu .'],\n",
       " ['you re lost .', 'tu es perdue .'],\n",
       " ['you re nice .', 't es sympa .'],\n",
       " ['you re nice .', 'vous etes sympa .'],\n",
       " ['you re nice .', 'vous etes sympas .'],\n",
       " ['you re nuts !', 'tu es fou !'],\n",
       " ['you re nuts !', 't es dingue !'],\n",
       " ['you re nuts !', 'vous etes dingue !'],\n",
       " ['you re nuts !', 'vous etes dingues !'],\n",
       " ['you re nuts !', 't es givre !'],\n",
       " ['you re nuts !', 't es givree !'],\n",
       " ['you re nuts !', 'vous etes givre !'],\n",
       " ['you re nuts !', 'vous etes givree !'],\n",
       " ['you re nuts !', 'vous etes givres !'],\n",
       " ['you re nuts !', 'vous etes givrees !'],\n",
       " ['you re rich .', 'tu es riche .'],\n",
       " ['you re rich .', 'vous etes riche .'],\n",
       " ['you re rich .', 'vous etes riches .'],\n",
       " ['you re rude .', 'tu es grossier .'],\n",
       " ['you re rude .', 'vous etes grossiers .'],\n",
       " ['you re rude .', 'vous etes grossiere .'],\n",
       " ['you re rude .', 'vous etes grossieres .'],\n",
       " ['you re rude .', 'tu es grossiere .'],\n",
       " ['you re safe .', 'tu es en securite .'],\n",
       " ['you re safe .', 'vous etes en securite .'],\n",
       " ['you re safe .', 'tu es sauf .'],\n",
       " ['you re safe .', 'vous etes saufs .'],\n",
       " ['you re safe .', 'vous etes sauf .'],\n",
       " ['you re safe .', 'vous etes sauve .'],\n",
       " ['you re safe .', 'vous etes sauves .'],\n",
       " ['you re safe .', 'tu es sauve .'],\n",
       " ['you re sick !', 'vous etes malade !'],\n",
       " ['you re sick !', 'tu es malade !'],\n",
       " ['you re sick !', 'vous etes malade !'],\n",
       " ['you re thin .', 'tu es mince .'],\n",
       " ['you re thin .', 'vous etes mince .'],\n",
       " ['you re thin .', 'vous etes minces .'],\n",
       " ['you re weak .', 'tu es faible .'],\n",
       " ['you re weak .', 'vous etes faible .'],\n",
       " ['you re weak .', 'vous etes faibles .'],\n",
       " ['he is a poet .', 'c est un poete .'],\n",
       " ['he is a poet .', 'il est poete .'],\n",
       " ['he is asleep .', 'il est endormi .'],\n",
       " ['he is cranky .', 'il est excentrique .'],\n",
       " ['he is eating .', 'il est en train de manger .'],\n",
       " ['he is heroic .', 'il est heroique .'],\n",
       " ['he is not in .', 'il n est pas chez lui .'],\n",
       " ['he is not in .', 'il n est pas a l interieur .'],\n",
       " ['he s english .', 'il est anglais .'],\n",
       " ['he s a bigot .', 'c est un bigot .'],\n",
       " ['he s a bigot .', 'c est un sectaire .'],\n",
       " ['he s a bigot .', 'c est un fanatique .'],\n",
       " ['he s a bigot .', 'c est un illumine .'],\n",
       " ['he s in pain .', 'il souffre .'],\n",
       " ['he s married .', 'il est marie .'],\n",
       " ['he s my hero .', 'c est mon heros .'],\n",
       " ['he s out now .', 'il est actuellement a l exterieur .'],\n",
       " ['he s so cute .', 'il est si mignon !'],\n",
       " ['he s so cute .', 'il est tellement mignon !'],\n",
       " ['i am italian .', 'je suis italien .'],\n",
       " ['i am ashamed .', 'j ai honte .'],\n",
       " ['i am at home .', 'je suis a la maison .'],\n",
       " ['i am curious .', 'je suis curieux .'],\n",
       " ['i am married .', 'je suis mariee .'],\n",
       " ['i am so sick .', 'je suis tellement malade .'],\n",
       " ['i am so sick .', 'je suis si malade .'],\n",
       " ['i am so sick .', 'c est moi qui suis tellement malade .'],\n",
       " ['i am so sick .', 'c est moi qui suis si malade .'],\n",
       " ['i am thirsty .', 'j ai soif .'],\n",
       " ['i am working .', 'je suis en train de travailler .'],\n",
       " ['i m a coward .', 'je suis un couard .'],\n",
       " ['i m a coward .', 'je suis un lache .'],\n",
       " ['i m a doctor .', 'je suis medecin .'],\n",
       " ['i m a doctor .', 'je suis toubib .'],\n",
       " ['i m a farmer .', 'je suis fermier .'],\n",
       " ['i m a farmer .', 'je suis agriculteur .'],\n",
       " ['i m a farmer .', 'je travaille dans ma ferme .'],\n",
       " ['i m a farmer .', 'je suis un agriculteur .'],\n",
       " ['i m a purist .', 'je suis un puriste .'],\n",
       " ['i m addicted .', 'je suis drogue .'],\n",
       " ['i m addicted .', 'je suis accro .'],\n",
       " ['i m addicted .', 'j ai une assuetude .'],\n",
       " ['i m all done .', 'j ai tout fini .'],\n",
       " ['i m all done .', 'j ai tout termine .'],\n",
       " ['i m all ears .', 'je suis tout ouie .'],\n",
       " ['i m an adult .', 'je suis adulte .'],\n",
       " ['i m an agent .', 'je suis un agent .'],\n",
       " ['i m bleeding .', 'je suis en train de saigner .'],\n",
       " ['i m confused .', 'je me melange les pinceaux .'],\n",
       " ['i m creative .', 'je suis creatif .'],\n",
       " ['i m creative .', 'je suis creative .'],\n",
       " ['i m cultured .', 'je suis cultive .'],\n",
       " ['i m cultured .', 'je suis cultivee .'],\n",
       " ['i m divorced .', 'je suis divorce .'],\n",
       " ['i m divorced .', 'je suis divorcee .'],\n",
       " ['i m drowning .', 'je suis en train de me noyer .'],\n",
       " ['i m eighteen .', 'j ai dix huit ans .'],\n",
       " ['i m faithful .', 'je suis fidele .'],\n",
       " ['i m famished .', 'je suis affame !'],\n",
       " ['i m fearless .', 'je suis intrepide .'],\n",
       " ['i m fighting .', 'je me bats .'],\n",
       " ['i m finished .', 'j ai termine .'],\n",
       " ['i m finished .', 'j en ai termine .'],\n",
       " ['i m free now .', 'je suis libre maintenant .'],\n",
       " ['i m freezing .', 'je suis gele .'],\n",
       " ['i m grounded .', 'je suis cloue .'],\n",
       " ['i m grounded .', 'je suis clouee .'],\n",
       " ['i m gullible .', 'je suis credule .'],\n",
       " ['i m homesick .', 'j ai le mal du pays .'],\n",
       " ['i m hungover .', 'j ai la gueule de bois .'],\n",
       " ['i m in paris .', 'je suis a paris .'],\n",
       " ['i m innocent .', 'je suis innocent .'],\n",
       " ['i m innocent .', 'je suis innocente .'],\n",
       " ['i m innocent .', 'je suis ingenu .'],\n",
       " ['i m innocent .', 'je suis ingenue .'],\n",
       " ['i m involved .', 'je suis implique .'],\n",
       " ['i m involved .', 'je suis impliquee .'],\n",
       " ['i m managing .', 'je m en sors .'],\n",
       " ['i m new here .', 'je suis nouveau ici .'],\n",
       " ['i m no rebel .', 'je ne suis pas un rebelle .'],\n",
       " ['i m no saint .', 'je ne suis pas un saint .'],\n",
       " ['i m no saint .', 'je ne suis pas une sainte .'],\n",
       " ['i m not busy .', 'je ne suis pas occupe .'],\n",
       " ['i m not deaf .', 'je ne suis pas sourd .'],\n",
       " ['i m not deaf .', 'je ne suis pas sourde .'],\n",
       " ['i m not done .', 'je n ai pas fini .'],\n",
       " ['i m not done .', 'je n ai pas termine .'],\n",
       " ['i m not done .', 'je n en ai pas termine .'],\n",
       " ['i m not dumb .', 'je ne suis pas abruti .'],\n",
       " ['i m not dumb .', 'je ne suis pas abrutie .'],\n",
       " ['i m not evil .', 'je ne suis pas mauvais .'],\n",
       " ['i m not here .', 'je ne suis pas ici .'],\n",
       " ['i m not here .', 'je ne suis pas la .'],\n",
       " ['i m not home .', 'je ne suis pas chez moi .'],\n",
       " ['i m not home .', 'je ne suis pas a la maison .'],\n",
       " ['i m not hurt .', 'je ne suis pas blesse .'],\n",
       " ['i m not hurt .', 'je ne suis pas blessee .'],\n",
       " ['i m not mean .', 'je ne suis pas mechant .'],\n",
       " ['i m not mean .', 'je ne suis pas mechante .'],\n",
       " ['i m not rich .', 'je ne suis pas riche .'],\n",
       " ['i m not sure .', 'je n en suis pas certain .'],\n",
       " ['i m not sure .', 'je n en suis pas certaine .'],\n",
       " ['i m not tall .', 'je ne suis pas grand .'],\n",
       " ['i m not tall .', 'je ne suis pas grande .'],\n",
       " ['i m not ugly .', 'je ne suis pas laid .'],\n",
       " ['i m not ugly .', 'je ne suis pas laide .'],\n",
       " ['i m not well .', 'je ne vais pas bien .'],\n",
       " ['i m off duty .', 'je ne suis pas en service .'],\n",
       " ['i m offended .', 'je suis offense .'],\n",
       " ['i m offended .', 'je suis offensee .'],\n",
       " ['i m outraged .', 'je suis indigne .'],\n",
       " ['i m outraged .', 'je suis indignee .'],\n",
       " ['i m powerful .', 'je suis puissant .'],\n",
       " ['i m powerful .', 'je suis puissante .'],\n",
       " ['i m prepared .', 'je suis pret .'],\n",
       " ['i m prepared .', 'je suis preparee .'],\n",
       " ['i m prepared .', 'je suis prepare .'],\n",
       " ['i m punctual .', 'je suis ponctuel .'],\n",
       " ['i m punctual .', 'je suis ponctuelle .'],\n",
       " ['i m rational .', 'je suis rationnel .'],\n",
       " ['i m rational .', 'je suis rationnelle .'],\n",
       " ['i m reformed .', 'je me suis amende .'],\n",
       " ['i m reformed .', 'je me suis amendee .'],\n",
       " ['i m reliable .', 'je suis fiable .'],\n",
       " ['i m restless .', 'je ne tiens pas en place .'],\n",
       " ['i m ruthless .', 'je suis impitoyable .'],\n",
       " ['i m shooting .', 'je tire .'],\n",
       " ['i m sleeping .', 'je suis en train de dormir .'],\n",
       " ['i m so sorry .', 'je suis tellement desole !'],\n",
       " ['i m so sorry .', 'je suis tellement desolee !'],\n",
       " ['i m so tired !', 'je suis si fatigue !'],\n",
       " ['i m so tired !', 'je suis tellement las !'],\n",
       " ['i m speaking .', 'je suis en train de parler .'],\n",
       " ['i m starving !', 'je meurs de faim !'],\n",
       " ['i m starving .', 'je creve de faim !'],\n",
       " ['i m starving .', 'j ai la fringale .'],\n",
       " ['i m stubborn .', 'je suis tetu .'],\n",
       " ['i m stubborn .', 'je suis tetue .'],\n",
       " ['i m stubborn .', 'je suis obstine .'],\n",
       " ['i m stubborn .', 'je suis obstinee .'],\n",
       " ['i m the boss .', 'c est moi le patron .'],\n",
       " ['i m the boss .', 'c est moi la patronne .'],\n",
       " ['i m the boss .', 'je suis le patron .'],\n",
       " ['i m the boss .', 'je suis la patronne .'],\n",
       " ['i m thinking .', 'je reflechis .'],\n",
       " ['i m thorough .', 'je suis minutieux .'],\n",
       " ['i m thorough .', 'je suis minutieuse .'],\n",
       " ['i m thorough .', 'je suis consciencieux .'],\n",
       " ['i m thorough .', 'je suis consciencieuse .'],\n",
       " ['i m thrilled .', 'je suis ravi .'],\n",
       " ['i m thrilled .', 'je suis ravie .'],\n",
       " ['i m ticklish .', 'je suis chatouilleux .'],\n",
       " ['i m ticklish .', 'je suis chatouilleuse .'],\n",
       " ['i m too busy .', 'je suis trop occupe .'],\n",
       " ['i m too busy .', 'je suis trop occupee .'],\n",
       " ['i m too busy .', 'je suis trop affaire .'],\n",
       " ['i m too busy .', 'je suis trop affairee .'],\n",
       " ['i m truthful .', 'je dis la verite .'],\n",
       " ['i m unbiased .', 'je suis impartial .'],\n",
       " ['i m unbiased .', 'je suis impartiale .'],\n",
       " ['i m upstairs .', 'je suis au dessus .'],\n",
       " ['i m very fat .', 'je suis tres gros .'],\n",
       " ['i m very fat .', 'je suis tres gras .'],\n",
       " ['i m very sad .', 'je suis tres triste .'],\n",
       " ['i m very shy .', 'je suis tres timide .'],\n",
       " ['i m worn out .', 'je suis epuise .'],\n",
       " ['she is a fox .', 'c est un renard .'],\n",
       " ['she is lucky .', 'elle est chanceuse .'],\n",
       " ['she is lucky .', 'elle est chancarde .'],\n",
       " ['she is quiet .', 'elle est tranquille .'],\n",
       " ['she is sharp .', 'elle est tranchante .'],\n",
       " ['she is sharp .', 'elle est affutee .'],\n",
       " ['she is wrong .', 'elle a tort .'],\n",
       " ['she is young .', 'elle est jeune .'],\n",
       " ['they re back .', 'ils sont de retour .'],\n",
       " ['they re back .', 'elles sont de retour .'],\n",
       " ['they re boys .', 'ce sont des garcons .'],\n",
       " ['they re cold .', 'ils sont froids .'],\n",
       " ['they re cold .', 'elles sont froides .'],\n",
       " ['they re cool .', 'ils sont sympa .'],\n",
       " ['they re cool .', 'elles sont sympa .'],\n",
       " ['they re cops .', 'ce sont des flics .'],\n",
       " ['they re cute .', 'ils sont mignons .'],\n",
       " ['they re cute .', 'elles sont mignonnes .'],\n",
       " ['they re dead .', 'ils sont decedes .'],\n",
       " ['they re dead .', 'elles sont decedees .'],\n",
       " ['they re done .', 'ils ont termine .'],\n",
       " ['they re done .', 'elles ont termine .'],\n",
       " ['they re free .', 'ils sont libres .'],\n",
       " ['they re free .', 'elles sont libres .'],\n",
       " ['they re gone .', 'ils sont partis .'],\n",
       " ['they re gone .', 'elles sont parties .'],\n",
       " ['they re gone .', 'il n y en a plus .'],\n",
       " ['they re here .', 'ils sont la .'],\n",
       " ['they re mine .', 'ils sont a moi .'],\n",
       " ['they re mine .', 'ils sont miens .'],\n",
       " ['they re mine .', 'ce sont les miens .'],\n",
       " ['they re mine .', 'ce sont les miennes .'],\n",
       " ['they re mine .', 'elles sont miennes .'],\n",
       " ['they re mine .', 'elles sont a moi .'],\n",
       " ['they re rich .', 'ils sont riches .'],\n",
       " ['they re rich .', 'elles sont riches .'],\n",
       " ['they re weak .', 'ils sont faibles .'],\n",
       " ['they re weak .', 'elles sont faibles .'],\n",
       " ['we are arabs .', 'nous sommes arabes .'],\n",
       " ['we are happy .', 'nous sommes heureux .'],\n",
       " ['we re a team .', 'nous sommes une equipe .'],\n",
       " ['we re adults .', 'nous sommes des adultes .'],\n",
       " ['we re all ok .', 'nous allons tous bien .'],\n",
       " ['we re at war .', 'nous sommes en guerre .'],\n",
       " ['we re biased .', 'notre point de vue est biaise .'],\n",
       " ['we re biased .', 'nous avons des prejuges .'],\n",
       " ['we re buying .', 'nous achetons .'],\n",
       " ['we re closed .', 'nous sommes fermes .'],\n",
       " ['we re coming .', 'nous venons .'],\n",
       " ['we re dating .', 'nous sortons ensemble .'],\n",
       " ['we re doomed .', 'nous sommes condamnes .'],\n",
       " ['we re hiding .', 'nous nous cachons .'],\n",
       " ['we re inside .', 'nous sommes a l interieur .'],\n",
       " ['we re joking .', 'nous plaisantons .'],\n",
       " ['we re losing .', 'nous perdons .'],\n",
       " ['we re losing .', 'nous sommes en train de perdre .'],\n",
       " ['we re moving .', 'nous sommes en train de bouger .'],\n",
       " ['we re normal .', 'nous sommes normaux .'],\n",
       " ['we re normal .', 'nous sommes normales .'],\n",
       " ['we re paying .', 'nous sommes en train de payer .'],\n",
       " ['we re pooped .', 'nous sommes creves .'],\n",
       " ['we re pooped .', 'nous sommes crevees .'],\n",
       " ['we re ruined .', 'nous sommes ruines .'],\n",
       " ['we re ruined .', 'nous sommes ruinees .'],\n",
       " ['we re shaken .', 'nous sommes remues .'],\n",
       " ['we re shaken .', 'nous sommes remuees .'],\n",
       " ['we re sneaky .', 'nous sommes sournois .'],\n",
       " ['we re sneaky .', 'nous sommes sournoises .'],\n",
       " ['we re strong .', 'nous sommes forts .'],\n",
       " ['we re strong .', 'nous sommes fortes .'],\n",
       " ['we re trying .', 'nous essayons .'],\n",
       " ['you are good .', 'vous etes bon .'],\n",
       " ['you are good .', 'vous etes bonne .'],\n",
       " ['you are good .', 'vous etes bons .'],\n",
       " ['you are good .', 'vous etes bonnes .'],\n",
       " ['you are good .', 'tu es bon .'],\n",
       " ['you are good .', 'tu es bonne .'],\n",
       " ['you are late .', 'tu es en retard .'],\n",
       " ['you are late .', 'vous etes en retard .'],\n",
       " ['you are rich .', 'vous etes riches .'],\n",
       " ['you re bossy .', 'tu joues au chef .'],\n",
       " ['you re bossy .', 'tu fais le chef .'],\n",
       " ['you re crazy .', 'tu es fou .'],\n",
       " ['you re cruel .', 'tu es cruelle .'],\n",
       " ['you re cruel .', 'tu es cruel .'],\n",
       " ['you re cruel .', 'vous etes cruelle .'],\n",
       " ['you re cruel .', 'vous etes cruelles .'],\n",
       " ['you re cruel .', 'vous etes cruel .'],\n",
       " ['you re cruel .', 'vous etes cruels .'],\n",
       " ['you re early .', 'tu viens tot .'],\n",
       " ['you re early .', 'vous etes matinal .'],\n",
       " ['you re early .', 'vous etes matinale .'],\n",
       " ['you re early .', 'tu es matinal .'],\n",
       " ['you re early .', 'tu es matinale .'],\n",
       " ['you re early .', 'tu es en avance .'],\n",
       " ['you re early .', 'vous etes en avance .'],\n",
       " ['you re fired .', 'tu es vire .'],\n",
       " ['you re fired .', 'tu es licencie .'],\n",
       " ['you re first .', 'tu es en premier .'],\n",
       " ['you re first .', 'tu passes en premier .'],\n",
       " ['you re first .', 'vous etes en premier .'],\n",
       " ['you re funny .', 't es marrante .'],\n",
       " ['you re funny .', 't es marrant .'],\n",
       " ['you re funny .', 'vous etes marrants .'],\n",
       " ['you re funny .', 'vous etes marrantes .'],\n",
       " ['you re funny .', 'vous etes marrant .'],\n",
       " ['you re funny .', 'vous etes marrante .'],\n",
       " ['you re fussy .', 'tu es difficile .'],\n",
       " ['you re fussy .', 'tu fais des manieres .'],\n",
       " ['you re fussy .', 'vous faites des manieres .'],\n",
       " ['you re gross !', 'tu es malpoli !'],\n",
       " ['you re lying !', 'tu mens !'],\n",
       " ['you re lying !', 'vous mentez !'],\n",
       " ['you re lying .', 'vous mentez .'],\n",
       " ['you re moody .', 'tu es lunatique .'],\n",
       " ['you re naive .', 'tu es naif .'],\n",
       " ['you re naive .', 'tu es naive .'],\n",
       " ['you re naive .', 'vous etes naif .'],\n",
       " ['you re naive .', 'vous etes naive .'],\n",
       " ['you re naive .', 'vous etes naifs .'],\n",
       " ['you re naive .', 'vous etes naives .'],\n",
       " ['you re quiet .', 'tu es calme .'],\n",
       " ['you re quiet .', 'tu es tranquille .'],\n",
       " ['you re right .', 'tu as raison .'],\n",
       " ['you re silly .', 'tu es idiot .'],\n",
       " ['you re silly .', 'vous etes idiot .'],\n",
       " ['you re silly .', 'vous etes idiote .'],\n",
       " ['you re silly .', 'tu es idiote .'],\n",
       " ['you re silly .', 'vous etes idiots .'],\n",
       " ['you re silly .', 'vous etes idiotes .'],\n",
       " ['you re stuck .', 't es plante .'],\n",
       " ['you re stuck .', 't es plantee .'],\n",
       " ['you re stuck .', 'vous etes plantes .'],\n",
       " ['you re stuck .', 'vous etes plantees .'],\n",
       " ['you re stuck .', 'vous etes plantee .'],\n",
       " ['you re stuck .', 'vous etes plante .'],\n",
       " ['you re tough .', 'tu es dure .'],\n",
       " ['you re tough .', 'tu es dur .'],\n",
       " ['you re tough .', 'vous etes dur .'],\n",
       " ['you re tough .', 'vous etes dure .'],\n",
       " ['you re tough .', 'vous etes durs .'],\n",
       " ['you re tough .', 'vous etes dures .'],\n",
       " ['you re upset .', 'tu es contrariee .'],\n",
       " ['you re upset .', 'tu es contrarie .'],\n",
       " ['you re weird .', 'tu es bizarre .'],\n",
       " ['you re weird .', 'vous etes bizarre .'],\n",
       " ['you re weird .', 'vous etes bizarres .'],\n",
       " ['you re wrong .', 'tu es dans l erreur .'],\n",
       " ['you re wrong .', 'tu as tort .'],\n",
       " ['you re young .', 'tu es jeune .'],\n",
       " ['you re young .', 'vous etes jeune .'],\n",
       " ['you re young .', 'vous etes jeunes .'],\n",
       " ['he is british .', 'il est britannique .'],\n",
       " ['he is english .', 'il est anglais .'],\n",
       " ['he is a thief .', 'c est un voleur .'],\n",
       " ['he is foolish .', 'il est idiot .'],\n",
       " ['he is my boss .', 'c est mon patron .'],\n",
       " ['he is my type !', 'il est mon genre !'],\n",
       " ['he is no fool .', 'il n est pas idiot .'],\n",
       " ['he is no fool .', 'il n est pas fou .'],\n",
       " ['he is out now .', 'il est actuellement sorti .'],\n",
       " ['he is reading .', 'il lit .'],\n",
       " ['he is reading .', 'il est en train de lire .'],\n",
       " ['he is running .', 'il court .'],\n",
       " ['he is skating .', 'il fait du patin .'],\n",
       " ['he is skating .', 'il patine .'],\n",
       " ['he is too old .', 'il est trop vieux .'],\n",
       " ['he s a grouch .', 'c est un rouspeteur .'],\n",
       " ['he s a jesuit .', 'il est jesuite .'],\n",
       " ['he s a senior .', 'c est un aine .'],\n",
       " ['he s a senior .', 'c est un ancien .'],\n",
       " ['he s a senior .', 'c est un retraite .'],\n",
       " ['he s a tycoon .', 'c est un magnat .'],\n",
       " ['he s addicted .', 'il est accro .'],\n",
       " ['he s addicted .', 'il a une assuetude .'],\n",
       " ['he s addicted .', 'il est drogue .'],\n",
       " ['he s adorable .', 'il est adorable .'],\n",
       " ['he s after me .', 'il est derriere moi .'],\n",
       " ['he s after me .', 'il est apres moi .'],\n",
       " ['he s after me .', 'il est apres mes fesses .'],\n",
       " ['he s after me .', 'il me poursuit .'],\n",
       " ['he s annoying .', 'il est embetant .'],\n",
       " ['he s demented .', 'il est fou .'],\n",
       " ['he s in tokyo .', 'il est a tokyo .'],\n",
       " ['he s innocent .', 'il est innocent .'],\n",
       " ['he s innocent .', 'il est ingenu .'],\n",
       " ['he s insecure .', 'il est peu sur de lui .'],\n",
       " ['he s insecure .', 'il manque de confiance en lui .'],\n",
       " ['he s no saint .', 'il n est pas un saint .'],\n",
       " ['he s no saint .', 'ce n est pas un saint .'],\n",
       " ['he s not home .', 'il n est pas a la maison .'],\n",
       " ['he s not sick .', 'il n est pas malade .'],\n",
       " ['he s outraged .', 'il est indigne .'],\n",
       " ['he s ruthless .', 'il est impitoyable .'],\n",
       " ['he s ruthless .', 'il est sans pitie .'],\n",
       " ['he s so young .', 'il est si jeune .'],\n",
       " ['he s so young .', 'il est tellement jeune .'],\n",
       " ['he s studying .', 'il etudie .'],\n",
       " ['he s studying .', 'il est en train d etudier .'],\n",
       " ['he s too busy .', 'il est trop occupe .'],\n",
       " ['he s too slow .', 'il est trop lent .'],\n",
       " ['he s very ill .', 'il est tres malade .'],\n",
       " ['he s very ill .', 'il est fort malade .'],\n",
       " ['he s your son .', 'il est ton fils .'],\n",
       " ['he s your son .', 'c est ton fils .'],\n",
       " ['he s your son .', 'c est votre fils .'],\n",
       " ['he s your son .', 'il est votre fils .'],\n",
       " ['i am american .', 'je suis americain .'],\n",
       " ['i am american .', 'je suis americaine .'],\n",
       " ['i am japanese .', 'je suis japonais .'],\n",
       " ['i am a muslim .', 'je suis musulman .'],\n",
       " ['i am a muslim .', 'je suis musulmane .'],\n",
       " ['i am a muslim .', 'je suis musulman .'],\n",
       " ['i am a runner .', 'je suis un coureur .'],\n",
       " ['i am all ears .', 'je suis tout ouie .'],\n",
       " ['i am diabetic .', 'je suis diabetique .'],\n",
       " ['i am divorced .', 'je suis divorce .'],\n",
       " ['i am divorced .', 'je suis divorcee .'],\n",
       " ['i am in paris .', 'je suis a paris .'],\n",
       " ['i am new here .', 'je suis nouveau ici .'],\n",
       " ['i am new here .', 'je suis nouveau ici .'],\n",
       " ['i am not deaf .', 'je ne suis pas sourd .'],\n",
       " ['i am so sorry .', 'je suis tellement desole !'],\n",
       " ['i am so sorry .', 'je suis tellement desolee !'],\n",
       " ['i am very sad .', 'je suis tres triste .'],\n",
       " ['i m a patient .', 'je suis un patient .'],\n",
       " ['i m a patient .', 'je suis une patiente .'],\n",
       " ['i m a student .', 'je suis etudiant .'],\n",
       " ['i m a teacher .', 'je suis professeur .'],\n",
       " ['i m a teacher .', 'je suis enseignante .'],\n",
       " ['i m adaptable .', 'je m adapte .'],\n",
       " ['i m afraid so .', 'j en ai peur .'],\n",
       " ['i m all alone .', 'je suis tout seul .'],\n",
       " ['i m all right .', 'je vais bien .'],\n",
       " ['i m all yours .', 'je suis tout a toi .'],\n",
       " ['i m all yours .', 'je suis tout a vous .'],\n",
       " ['i m all yours .', 'je suis toute a toi .'],\n",
       " ['i m all yours .', 'je suis toute a vous .'],\n",
       " ['i m ambitious .', 'je suis ambitieuse .'],\n",
       " ['i m ambitious .', 'je suis ambitieux .'],\n",
       " ['i m an artist .', 'je suis un artiste .'],\n",
       " ['i m an artist .', 'je suis une artiste .'],\n",
       " ['i m an orphan .', 'je suis orphelin .'],\n",
       " ['i m attentive .', 'je suis attentive .'],\n",
       " ['i m attentive .', 'je suis attentif .'],\n",
       " ['i m available .', 'je suis disponible .'],\n",
       " ['i m beautiful .', 'je suis belle .'],\n",
       " ['i m beautiful .', 'je suis beau .'],\n",
       " ['i m busy too .', 'je suis egalement affaire .'],\n",
       " ['i m busy too .', 'je suis egalement affairee .'],\n",
       " ['i m busy too .', 'je suis egalement occupe .'],\n",
       " ['i m busy too .', 'je suis egalement occupee .'],\n",
       " ['i m concerned .', 'je suis preoccupe .'],\n",
       " ['i m concerned .', 'je suis preoccupee .'],\n",
       " ['i m confident .', 'j ai confiance .'],\n",
       " ['i m contented .', 'me voila satisfait .'],\n",
       " ['i m contented .', 'me voila satisfaite .'],\n",
       " ['i m convinced .', 'j en suis convaincu .'],\n",
       " ['i m depressed .', 'je suis deprime .'],\n",
       " ['i m desperate .', 'je suis desespere .'],\n",
       " ['i m desperate .', 'je suis desesperee .'],\n",
       " ['i m different .', 'je suis differente .'],\n",
       " ['i m disgusted .', 'je suis degoute .'],\n",
       " ['i m disgusted .', 'je suis degoutee .'],\n",
       " ['i m easygoing .', 'je suis facile a vivre .'],\n",
       " ['i m exhausted .', 'je suis epuisee .'],\n",
       " ['i m exhausted .', 'je suis epuise .'],\n",
       " ['i m exhausted .', 'je suis vanne .'],\n",
       " ['i m exhausted .', 'je suis vannee .'],\n",
       " ['i m exhausted .', 'je suis fourbu .'],\n",
       " ['i m exhausted .', 'je suis creve .'],\n",
       " ['i m exhausted .', 'je suis crevee .'],\n",
       " ['i m forgetful .', 'je suis distrait .'],\n",
       " ['i m forgetful .', 'je suis distraite .'],\n",
       " ['i m forgetful .', 'je suis etourdi .'],\n",
       " ['i m forgetful .', 'je suis etourdie .'],\n",
       " ['i m home tom .', 'je suis chez moi tom .'],\n",
       " ['i m hung over .', 'j ai mal au c ur .'],\n",
       " ['i m impatient .', 'je suis impatient .'],\n",
       " ['i m impatient .', 'je suis impatiente .'],\n",
       " ['i m important .', 'je suis important .'],\n",
       " ['i m impressed .', 'je suis impressionnee .'],\n",
       " ['i m impulsive .', 'je suis impulsif .'],\n",
       " ['i m impulsive .', 'je suis impulsive .'],\n",
       " ['i m in boston .', 'je suis a boston .'],\n",
       " ['i m in danger .', 'je suis en danger .'],\n",
       " ['i m intrigued .', 'je suis intrigue .'],\n",
       " ['i m intrigued .', 'je suis intriguee .'],\n",
       " ['i m intrigued .', 'cela m intrigue .'],\n",
       " ['i m just lazy .', 'je suis juste paresseux .'],\n",
       " ['i m just lazy .', 'je suis juste paresseuse .'],\n",
       " ['i m listening .', 'j ecoute .'],\n",
       " ['i m motivated .', 'je suis motivee .'],\n",
       " ['i m motivated .', 'je suis motive .'],\n",
       " ['i m no expert .', 'je ne suis pas un expert .'],\n",
       " ['i m not a cop .', 'je ne suis pas flic .'],\n",
       " ['i m not a fan .', 'je ne fais pas partie de ses admirateurs .'],\n",
       " ['i m not a fan .', 'je ne fais pas partie de leurs admirateurs .'],\n",
       " ['i m not alone .', 'je ne suis pas seul .'],\n",
       " ['i m not alone .', 'je ne suis pas seule .'],\n",
       " ['i m not angry !', 'je ne suis pas en colere !'],\n",
       " ['i m not angry .', 'je ne suis pas en colere .'],\n",
       " ['i m not armed .', 'je ne suis pas arme .'],\n",
       " ['i m not armed .', 'je ne suis pas armee .'],\n",
       " ['i m not blind .', 'je ne suis pas aveugle .'],\n",
       " ['i m not crazy .', 'je ne suis pas fou .'],\n",
       " ['i m not crazy .', 'je ne suis pas folle .'],\n",
       " ['i m not dying .', 'je ne suis pas en train de mourir .'],\n",
       " ['i m not going .', 'je n y vais pas .'],\n",
       " ['i m not going .', 'je ne m y rends pas .'],\n",
       " ['i m not going .', 'je ne m en vais pas .'],\n",
       " ['i m not happy .', 'je ne suis pas content .'],\n",
       " ['i m not happy .', 'je ne suis pas heureux .'],\n",
       " ['i m not happy .', 'je ne suis pas heureuse .'],\n",
       " ['i m not happy .', 'je ne suis pas contente .'],\n",
       " ['i m not lying .', 'je ne suis pas en train de mentir .'],\n",
       " ['i m not naive .', 'je ne suis pas naif .'],\n",
       " ...]"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pairs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "671db479",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入plt以便绘制损失曲线\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def trainIters(encoder, decoder, n_iters, print_every=1000, plot_every=100, learning_rate=0.01):\n",
    "    \"\"\"训练迭代函数, 输入参数有6个，分别是encoder, decoder: 编码器和解码器对象，\n",
    "       n_iters: 总迭代步数, print_every:打印日志间隔, plot_every:绘制损失曲线间隔, learning_rate学习率\"\"\"\n",
    "    # 获得训练开始时间戳\n",
    "    start = time.time()\n",
    "    # 每个损失间隔的平均损失保存列表，用于绘制损失曲线\n",
    "    plot_losses = []\n",
    "\n",
    "    # 每个打印日志间隔的总损失，初始为0\n",
    "    print_loss_total = 0  \n",
    "    # 每个绘制损失间隔的总损失，初始为0\n",
    "    plot_loss_total = 0  \n",
    "\n",
    "    # 使用预定义的SGD作为优化器，将参数和学习率传入其中\n",
    "    encoder_optimizer = optim.SGD(encoder.parameters(), lr=learning_rate)\n",
    "    decoder_optimizer = optim.SGD(decoder.parameters(), lr=learning_rate)\n",
    "\n",
    "    # 选择损失函数\n",
    "    criterion = nn.NLLLoss()\n",
    "\n",
    "    # 根据设置迭代步进行循环\n",
    "    for iter in range(1, n_iters + 1):\n",
    "        # 每次从语言对列表中随机取出一条作为训练语句\n",
    "        training_pair = tensorsFromPair(random.choice(pairs))\n",
    "        # 分别从training_pair中取出输入张量和目标张量\n",
    "        input_tensor = training_pair[0]\n",
    "        '''\n",
    "        tensor([[2],\n",
    "         [3],\n",
    "         [4],\n",
    "         [1]])\n",
    "        \n",
    "        '''\n",
    "        target_tensor = training_pair[1]\n",
    "        \n",
    "        '''\n",
    "         tensor([[2],\n",
    "         [3],\n",
    "         [4],\n",
    "         [5],\n",
    "         [1]])\n",
    "        \n",
    "        '''\n",
    "\n",
    "        # 通过train函数获得模型运行的损失\n",
    "        loss = train(input_tensor, target_tensor, encoder,\n",
    "                     decoder, encoder_optimizer, decoder_optimizer, criterion)\n",
    "        # 将损失进行累和\n",
    "        print_loss_total += loss\n",
    "        plot_loss_total += loss\n",
    "\n",
    "        # 当迭代步达到日志打印间隔时\n",
    "        if iter % print_every == 0:\n",
    "            # 通过总损失除以间隔得到平均损失\n",
    "            print_loss_avg = print_loss_total / print_every\n",
    "            # 将总损失归0\n",
    "            print_loss_total = 0\n",
    "            # 打印日志，日志内容分别是：训练耗时，当前迭代步，当前进度百分比，当前平均损失\n",
    "            print('%s (%d %d%%) %.4f' % (timeSince(start),\n",
    "                                         iter, iter / n_iters * 100, print_loss_avg))\n",
    "\n",
    "        # 当迭代步达到损失绘制间隔时\n",
    "        if iter % plot_every == 0:\n",
    "            # 通过总损失除以间隔得到平均损失\n",
    "            plot_loss_avg = plot_loss_total / plot_every\n",
    "            # 将平均损失装进plot_losses列表\n",
    "            plot_losses.append(plot_loss_avg)\n",
    "            # 总损失归0\n",
    "            plot_loss_total = 0\n",
    "\n",
    "    # 绘制损失曲线\n",
    "    plt.figure()  \n",
    "    plt.plot(plot_losses)\n",
    "    # 保存到指定路径\n",
    "    plt.savefig(\"./s2s_loss.png\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bc1e376c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置隐层大小为256 ，也是词嵌入维度      \n",
    "hidden_size = 256\n",
    "# 通过input_lang.n_words获取输入词汇总数，与hidden_size一同传入EncoderRNN类中\n",
    "# 得到编码器对象encoder1\n",
    "encoder1 = EncoderRNN(input_lang.n_words, hidden_size).to(device)\n",
    "\n",
    "# 通过output_lang.n_words获取目标词汇总数，与hidden_size和dropout_p一同传入AttnDecoderRNN类中\n",
    "# 得到解码器对象attn_decoder1\n",
    "attn_decoder1 = AttnDecoderRNN(hidden_size, output_lang.n_words, dropout_p=0.1).to(device) #MAX_LENGTH=10 \n",
    "\n",
    "# 设置迭代步数 \n",
    "n_iters = 75000\n",
    "# 设置日志打印间隔\n",
    "print_every = 5000 \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cb7f4a99",
   "metadata": {},
   "outputs": [
    {
     "ename": "",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
      "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
      "\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
      "\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
     ]
    }
   ],
   "source": [
    "trainIters(encoder1, attn_decoder1, n_iters, print_every=print_every)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0f459522",
   "metadata": {},
   "outputs": [],
   "source": [
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "511ae7eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8444552724394488"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random.random()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8ed4774",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch11.3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
